07 · 进程与端口管理
一句话定位:判断“我的服务还活着吗”“端口被谁占了”“怎么杀掉卡死的进程”。
1. 查进程:ps
# 最常用组合:查所有进程
ps -ef # 全格式列出所有进程
ps aux # 另一种风格(带CPU/内存占用)
# ★实战:查自己的 Java 进程
ps -ef | grep java
ps -ef | grep app.jar
# 输出解读(ps -ef)
# UID PID PPID C STIME TTY TIME CMD
# root 12345 1 0 10:30 ? 00:01:23 java -jar app.jar
# └─进程ID(kill 要用它) └─启动命令
2. Java 专属:jps / jstack / jmap
JDK 自带的神器(比 ps 更懂 Java):
jps # 列出所有 Java 进程(只显示 PID + 主类)
jps -l # 显示完整包名/jar路径
jps -v # 显示 JVM 启动参数
# 排查 CPU 高 / 卡死:打印线程栈
jstack <PID> > thread.txt # 导出所有线程堆栈
jstack <PID> | grep -A 20 "BLOCKED" # 看阻塞的线程
# 排查内存:看堆内存
jmap -heap <PID> # 堆内存概况
jmap -histo <PID> | head -20 # 对象数量 Top20(查内存泄漏)
jmap -dump:format=b,file=heap.hprof <PID> # 导出堆快照(用 MAT 分析)
这些是 Java 程序员排查线上问题的看家本领,详细用法见 15 篇故障排查。
3. 实时监控进程:top
top # 实时进程列表(类似任务管理器)
top 界面操作:
| P | 按 CPU 使用率排序(默认) |
| M | 按内存使用率排序 |
| 1 | 展开显示每个 CPU 核心 |
| k | 输入 PID 杀进程 |
| q | 退出 |
# 只看某个进程
top -p 12345
# 更好用的替代品(需安装):htop,彩色、可鼠标操作
htop
4. 杀进程:kill
kill 12345 # 温柔地请求结束(发 SIGTERM,应用能优雅停机)
kill -9 12345 # 强制杀死(SIGKILL,最后手段,不给清理机会)
kill -15 12345 # = kill 12345,推荐优先用
# ★一键杀掉某个 Java 应用
ps -ef | grep app.jar | grep -v grep | awk '{print $2}' | xargs kill -9
# 按名字杀(谨慎,会杀掉所有匹配的)
pkill -f app.jar
killall java # 杀所有 java 进程(⚠️慎用)
优先 kill(15) 让 Spring Boot 执行 @PreDestroy/优雅停机;实在杀不掉再 kill -9。
5. 查端口占用(部署必备)
“端口 8080 被占用,启动失败”:
# ss(新,推荐,快)
ss -tlnp # 列出所有监听的 TCP 端口
ss -tlnp | grep 8080 # 看 8080 被谁占了
# netstat(老,部分系统要装 net-tools)
netstat -tlnp | grep 8080
# 参数含义:-t TCP -l 监听 -n 显示数字(不解析域名) -p 显示进程
# lsof:查某端口对应的进程
lsof -i:8080 # 谁在用 8080
lsof -i:8080 -t # 只输出 PID(方便 kill)
# ★一键找到并杀掉占用端口的进程
lsof -i:8080 -t | xargs kill -9
输出解读:
LISTEN 0 100 *:8080 *:* users:(("java",pid=12345,fd=28))
└─占用端口的 PID
6. 后台任务管理
jobs # 查看当前 shell 的后台任务
命令 & # 命令后台运行
Ctrl+Z # 把前台任务暂停并转后台
bg # 让暂停的任务后台继续跑
fg # 把后台任务调回前台
nohup 命令 & # 后台运行且关掉终端也不停(部署常用,见10篇)
7. 实战场景
# 场景1:服务启动报“端口被占用”
ss -tlnp | grep 8080 # 找到占用的 PID
kill -9 <PID> # 杀掉
# 或一条命令:
lsof -i:8080 -t | xargs kill -9
# 场景2:确认我的服务在不在跑
jps -l | grep app
ps -ef | grep app.jar | grep -v grep
# 场景3:服务卡死没响应
jps # 拿到 PID
jstack <PID> > /tmp/stack.txt # 导出线程栈分析
top -p <PID> # 看是不是 CPU 打满
# 场景4:优雅重启
ps -ef | grep app.jar | grep -v grep | awk '{print $2}' | xargs kill
# 等几秒确认退出后再启动
8. 坑与最佳实践
- ⚠️ grep java 会把 grep 自己也匹配进去,记得 | grep -v grep 排除。
- ✅ 杀 Java 进程优先 kill(15),给优雅停机机会;卡死才 kill -9。
- ✅ 查端口 ss -tlnp 比 netstat 快且新系统默认有。
- ⚠️ killall / pkill 范围大,生产环境小心误杀。
- 💡 记住 lsof -i:端口 -t | xargs kill -9 这个一键清端口神器。
9. 本篇速记
ps -ef | grep java # 查进程
jps -l # 查 Java 进程
top / htop # 实时监控
kill <PID> / kill -9 <PID> # 结束进程
ss -tlnp | grep 端口 # 查端口占用
lsof -i:端口 -t | xargs kill -9 # 一键清端口 ★
jstack <PID> # 看线程栈(卡死排查)
网硕互联帮助中心


评论前必须登录!
注册