管理运行在Linux上的Spring Boot JAR包进程,你需要掌握以下核心命令和技巧:
1. 进程查找命令
查找Spring Boot进程
bash
# 按名称查找
ps aux | grep java
ps aux | grep spring
ps aux | grep jar
# 精确查找jar包进程
ps aux | grep -E '\.jar$'
# 查看指定端口的进程(Spring Boot常用端口)
sudo lsof -i :8080
sudo netstat -tlnp | grep :8080
使用pgrep和pkill
bash
# 查找进程ID
pgrep -f "java.*jar"
pgrep -f "spring-boot"
# 按应用名查找
pgrep -f "myapp.jar"
2. JAR包信息查看
查看启动命令和参数
bash
# 查看完整的启动命令
ps aux | grep java | grep -v grep
# 查看进程环境变量
cat /proc/{PID}/environ | tr '\0' '\n'
# 查看JVM参数
jcmd {PID} VM.command_line
查看JAR包路径
bash
# 方法1:通过进程信息
ls -l /proc/{PID}/exe
# 方法2:通过lsof查看打开的文件
sudo lsof -p {PID} | grep '\.jar$'
# 方法3:查看进程的工作目录
ls -l /proc/{PID}/cwd
3. 进程管理命令
启动Spring Boot应用
bash
# 直接启动
java -jar app.jar
# 后台启动
nohup java -jar app.jar > app.log 2>&1 &
# 使用systemd(推荐生产环境)
sudo systemctl start myapp
# 使用screen/tmux
screen -S myspring java -jar app.jar
停止进程
bash
# 优雅停止
kill {PID}
# 强制停止
kill -9 {PID}
# 按名称停止
pkill -f "myapp.jar"
# 停止指定端口的进程
fuser -k 8080/tcp
4. 日志查看命令
bash
# 查看实时日志
tail -f app.log
# 查看Spring Boot启动日志
journalctl -u myapp.service -f
# 按时间查看
grep "2024-01-01" app.log
# 查看错误日志
grep -i error app.log
# 查看最后100行
tail -n 100 app.log
5. 监控和诊断
监控资源使用
bash
# 查看CPU/内存使用
top -p {PID}
htop
# 查看线程
ps -T -p {PID}
# 查看JVM堆内存
jstat -gc {PID}
# 生成堆转储
jmap -dump:live,format=b,file=heap.bin {PID}
网络连接检查
bash
# 查看应用监听的端口
sudo ss -tlnp | grep {PID}
sudo netstat -tlnp | grep {PID}
# 查看连接数
sudo ss -s | grep :8080
6. 常用组合命令
一键找到并显示Spring Boot应用信息
bash
#!/bin/bash
# find_springboot.sh
echo "=== 查找所有Spring Boot应用 ==="
ps aux | grep java | grep -E '\.jar$' | grep -v grep | while read line
do
pid=$(echo $line | awk '{print $2}')
app=$(echo $line | awk '{for(i=11;i<=NF;i++) printf $i" "}')
echo "PID: $pid"
echo "应用: $app"
echo "端口: $(sudo lsof -p $pid | grep LISTEN | awk '{print $9}')"
echo "---"
done
优雅重启脚本
bash
#!/bin/bash
APP_NAME="myapp.jar"
PID=$(pgrep -f $APP_NAME)
if [ -z "$PID" ]; then
echo "应用未运行"
exit 1
fi
echo "停止应用..."
kill $PID
sleep 10
# 等待进程停止
if ps -p $PID > /dev/null; then
echo "强制停止..."
kill -9 $PID
fi
echo "启动应用..."
nohup java -jar $APP_NAME > app.log 2>&1 &
7. 系统服务管理(生产环境推荐)
Systemd服务配置示例
ini
# /etc/systemd/system/myapp.service
[Unit]
Description=My Spring Boot Application
After=network.target
[Service]
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar myapp.jar
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
使用命令
bash
# 管理服务
sudo systemctl start myapp
sudo systemctl stop myapp
sudo systemctl restart myapp
sudo systemctl status myapp
sudo journalctl -u myapp -f
8. 实用技巧
查找占用端口的进程
bash
# 查找哪个进程占用了8080端口
function find_port() {
sudo lsof -i :$1
}
# 批量查找Spring Boot应用
find /opt -name "*.jar" -type f 2>/dev/null
查看Spring Boot健康检查
bash
# 使用curl检查应用健康状态
curl http://localhost:8080/actuator/health
curl http://localhost:8080/actuator/info
总结要点
- 查找进程 :
ps aux | grep java+pgrep -f - 查看详情 :
/proc/{PID}/目录 +lsof - 管理进程 :
kill/pkill+systemctl - 监控日志 :
tail -f+journalctl - 诊断问题 :
jcmd+jstack+jmap
掌握这些命令组合,你就能高效地管理和排查Linux上的Spring Boot应用了。建议将常用命令写成脚本,提高工作效率。