连载中 10/20

进程管理:top、kill 与 CPU 飙高的第一现场

2026-10-16 · 30 阅读 · 0 评论 · 0 赞

ps:给进程拍快照

$ ps aux | grep java
app  12345  8.5 32.1 8021888 ... java -jar app.jar
     ↑PID   ↑CPU% ↑内存%

$ ps -ef --forest     # 树状显示进程父子关系(谁是谁的子进程)

所有排障动作都从拿到 PID 开始:看它监听的端口(ss -ltnp)、读它的档案(/proc/PID/)、对它发信号(kill)。JVM 系列里 jstack、jmap 的第一个参数也是它。

top:实时仪表盘怎么读

$ top
top - 10:00:01 up 30 days,  load average: 0.52, 0.58, 0.59
%Cpu(s): 12.5 us,  3.1 sy,  0.0 ni, 83.9 id,  0.3 wa
MiB Mem :   7800.0 total,   1200.0 free,   4200.0 used,   2400.0 buff/cache

load average 三个数 = 最近 1 / 5 / 15 分钟的平均负载(等待 CPU + 等待磁盘的进程数)。经验值:持续超过 CPU 核心数就是过载,4 核机器 load 到 8 就该动手查了。三个细分指标:us 高是用户代码吃 CPU(应用自身问题);sy 高是内核忙(系统调用太频繁);wa 高是 CPU 在等磁盘 I/O(瓶颈在盘不在 U)。

top 交互三连:大写 M 按内存排序、大写 P 按 CPU 排序、数字 1 展开每颗核心。

kill:发的不是「杀死」,是信号

$ kill 12345          # 默认 SIGTERM(15):请你自行收尾退出
$ kill -9 12345       # SIGKILL:内核直接掐断,进程无法拦截
$ kill -l             # 查看全部信号
$ killall java        # 按进程名杀(危险:所有同名进程一起死)
$ pkill -f app.jar    # 按完整命令行匹配杀(更精准)

军规:先发 15,等十秒,不行再 9。-15 给进程善后机会(释放连接、刷盘、保存状态);-9 不给任何机会——数据库进程被 -9 可能触发漫长的崩溃恢复,网络服务可能端口卡在 TIME_WAIT 迟迟不能重绑。

僵尸与孤儿

僵尸进程:子进程已死,父进程没「收尸」(没调用 wait),ps 里状态显示 Z。它已经死了所以 kill 不掉,正确解法是修复父进程或重启父进程。孤儿进程:父进程先死,子进程被 1 号进程收养后继续运行——通常无害。

$ ps aux | awk '$8 ~ /Z/ {print $2, $11}'     # 找出所有僵尸进程

前后台切换与 CPU 飙高第一现场

$ ./long-task.sh &      # 末尾加 & 后台运行
$ jobs                  # 查看后台任务列表
$ fg %1                 # 把 1 号后台任务调回前台
# Ctrl+Z 暂停当前任务,再敲 bg 让它转后台继续跑

CPU 飙高的标准起手式:top 找到吃 CPU 的 PID → Java 进程用 jstack 按线程定位(JVM 系列讲过)→ 其他进程看 /proc/PID 或 strace 追系统调用。但注意:直接 & 跑的后台任务,SSH 一断就死——下一篇讲它的正确替代品:nohup 与 tmux,让任务在断线后依然活着。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#进程管理#top#kill#信号#load average

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10114 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9877 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9307 阅读 · 21 评论 · 287 赞