一、Linux 结束进程的常用命令

原始笔记中把这三个命令称为“杀手三剑客”,它们分别适合不同场景。

命令 说明
kill 按 PID 结束进程,最常用
pkill 按进程名或匹配条件发送信号,适合批量处理
killall 按进程名结束进程,使用前要确认名称是否精确匹配

1.1 kill 常见写法

kill 命令 说明
kill pid 默认发送终止信号 TERM
kill -9 pid 发送强制终止信号 KILL

使用 kill -9 虽然直接,但也要谨慎,尤其不要随意对数据库等关键服务使用强制结束信号,否则可能带来数据不一致或恢复成本。

二、什么是系统负载

2.1 负载的定义

在 Linux 中,负载是衡量系统繁忙程度的重要指标,通常以三个值表示,分别对应:

  • 1 分钟平均负载
  • 5 分钟平均负载
  • 15 分钟平均负载

负载的本质,可以理解为一段时间内系统运行队列的平均长度,也就是等待 CPU 或处于不可中断状态的任务数量。

2.2 如何理解平均负载

从运维排障角度,可以把平均负载理解为:单位时间内,系统中处于可运行状态以及不可中断状态的平均任务数。

它并不等同于 CPU 使用率:

  • CPU 很高,负载可能也高
  • 磁盘 IO 很重时,CPU 不一定高,但负载仍然可能很高

所以看到高负载后,不能只盯着 CPU,要继续判断是计算型问题还是 IO 型问题。

三、如何查看系统负载

3.1 使用 w

如果有监控平台,通常可以直接从监控平台看到负载;如果没有,也可以使用 w 命令手动查看:

$ w

image-20231018103410388

3.2 使用 uptime

uptime 也是最常见的负载查看方式:

$ uptime

10:34:43 up 4 days, 18:41,  3 users,  load average: 0.00, 0.01, 0.05

四、负载高如何排查

4.1 先判断是 CPU 还是 IO 问题

排查高负载时,第一步不是立刻杀进程,而是先区分问题来源。

4.1.1 定位 CPU 原因

查看 top 输出中的以下字段:

  • us:用户态 CPU 占用
  • sy:系统态 CPU 占用

如果这两个值较高,通常表示 CPU 压力较大。

image-20231018103835413

4.1.2 定位 IO 原因

如果 top 中的 wa(IO wait)较高,通常说明磁盘 IO 等待比较严重,负载高更可能是 IO 导致的。

image-20231018104046689

4.2 根据原因继续排查

4.2.1 CPU 型问题

如果判断是 CPU 导致的负载高,可以继续用 ps 过滤出占用 CPU 较高的进程,例如:

$ ps --no-heading aux | sort -rnk3 | head -5

或者直接查看某个可疑服务的进程信息,再结合业务日志与调用链继续定位。

4.2.2 IO 型问题

如果是 IO 导致的负载高,可以使用 iotop 查看哪些进程在持续占用磁盘 IO:

$ iotop -o

其中 -o 表示只显示有实际 IO 活动的进程,适合快速定位问题对象。

五、小结

处理 Linux 进程问题时,可以按这个顺序思考:

1、先确认是哪个进程有问题。 2、再判断是优雅终止还是强制结束。 3、如果表现为高负载,不要急着 kill -9,先区分 CPU 压力还是 IO 等待。 4、结合 uptimewtoppsiotop 逐步缩小范围,再做处理。