对于后端要和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应用了。建议将常用命令写成脚本,提高工作效率。

相关推荐
_Johnny_1 小时前
ubuntu将磁盘剩余空间自动分配指南
linux·运维·ubuntu
leiming61 小时前
linux 进程学习之信号
linux·运维·学习
喵手1 小时前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第4节】列表页→详情页:两段式采集(90%项目都这样)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·requests静态爬取·两段式采集
若风的雨1 小时前
linux Page Table 和 TLB 操作总结
linux
AlenTech1 小时前
如何解决Ubuntu中使用系统pip报错的问题,error: externally-managed-environment
linux·ubuntu·pip
zzZ··*2 小时前
自动登录上海大学校园
python·网络协议·selenium
weisian1512 小时前
进阶篇-4-数学篇-3--深度解析AI中的向量概念:从生活到代码,一文吃透核心逻辑
人工智能·python·生活·向量
写代码的【黑咖啡】2 小时前
Python中的Msgpack:高效二进制序列化库
开发语言·python
MistaCloud2 小时前
Pytorch进阶训练技巧(二)之梯度层面的优化策略
人工智能·pytorch·python·深度学习