对于后端要和linux打交道要掌握的点

管理运行在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

总结要点

  1. 查找进程ps aux | grep java + pgrep -f
  2. 查看详情/proc/{PID}/ 目录 + lsof
  3. 管理进程kill/pkill + systemctl
  4. 监控日志tail -f + journalctl
  5. 诊断问题jcmd + jstack + jmap

掌握这些命令组合,你就能高效地管理和排查Linux上的Spring Boot应用了。建议将常用命令写成脚本,提高工作效率。

相关推荐
lsh曙光13 小时前
延时at指令和定时cron指令
linux·服务器·网络
圆山猫13 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
笨鸟先飞,勤能补拙13 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
布鲁飞丝13 小时前
vivo Pulsar 万亿级消息处理实践()-Ansible运维部署
运维·ansible
XR12345678813 小时前
企业全光网络架构选型技术白皮书:从物理层到运维层的全链路分析
运维·网络·架构
似的83513 小时前
一步一步学习使用FireMonkey动画() 使用TAnimator类创建动画
linux·学习·nginx
HiDev_14 小时前
【非标自动化】2、认识元器件(直线模组)
运维·自动化
长和信泰光伏储能14 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂14 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
龙仔72515 小时前
人大金仓 KingbaseES V8 只读账号创建完整运维笔记
运维·笔记·sql·人大金仓