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

相关推荐
晚风叙码5 分钟前
Linux 进程概念(上):从冯诺依曼到进程调度
linux·运维·计算机外设
Z21-X14 分钟前
云原生运维笔记:硬核拆解OpenStack计算与存储——从主机聚合到Cinder挂载全流程
运维·笔记·学习·云原生·openstack
weixin_4404016915 分钟前
大数据技术-数据分析(EXcel+Python数据处理+SQL)
大数据·python·数据分析·excel
邪修king19 分钟前
Re:Linux系统篇(三十八):进程间通信ChapterSystem V 信号量深度解析|同步互斥、内核源码、C 指针多态、实战代码
java·linux·c语言
开开心心就好19 分钟前
电脑语音实时转文字工具,会议记录很省事
运维·服务器·前端·c#·ocr·perl·1024程序员节
坤坤子吖20 分钟前
Linux网络编程基础:从 MAC 到 IP,理解网络数据是怎么传输的
linux·网络·笔记·学习
甜到心里的蛋糕22 分钟前
AI 生成 MV 音频异响排查:频谱定位、片段替换与 Nginx 缓存
人工智能·python·nginx·ffmpeg·音视频·音频处理
2601_9679801132 分钟前
python中的静态方法和类方法
python·静态方法·类方法·实例化·方法调用
一只鹿鹿鹿35 分钟前
医院绩效管理体系方案
大数据·运维·安全·web安全·制造
智购科技无人售货机厂家39 分钟前
自动售货机物联网平台为什么会出现在线状态不一致?~YH
python·单片机·嵌入式硬件·django·pygame