精通Linux系列十五:系统负载400%,如何排查?
精通Linux系列点击关注公众号,AI&编程干货及时送达
查看进程
命令 | 作用 |
ps | 列出进程。 |
uptime | 查看系统负载。 |
w | 列出所有用户的活动进程。 |
top | 交互式地监控资源密集型的进程。 |
free | 显示可用内存。 |
进程是 Linux 系统上的一个工作单元。你运行的每一个程序都代表一个或多个进程,Linux 提供了一些命令来查看和操作它们。每个进程都由一个数字进程 ID(process ID),或者 PID 来标识。
进程与任务(请参阅前面的文章 ["Shell 任务控制"])是不同的:进程是操作系统的一部分,而任务是只有运行它们的 shell 才知道的高级构造。一个正在运行的程序包括一个或多个进程;一个任务包括一个或多个作为 shell 命令执行的程序。
ps
stdin stdout - file -- opt --help --version
ps [选项]
ps
命令显示你正在运行的进程的信息,以及可选的其他用户的进程信息:
→ ps
PID TTY TIME CMD
4706 pts/2 00:00:01 bash
15007 pts/2 00:00:00 emacs
16729 pts/2 00:00:00 ps
ps
至少有 80 个选项;我们只会介绍一些有用的组合。如果选项看起来是不一致的,那是因为提供的 ps
命令(GNU ps)整合了其他几个 Unix ps
命令的功能,试图与它们都兼容。
查看你的进程:
→ ps -ux
查看用户 “smith” 的所有进程:
→ ps -U smith
查看程序的所有实例:
→ ps -C 程序名称(原文:program_name)
查看终端 N
上的进程:
→ ps -tN
查看特定的进程 1,2,和 3505:
→ ps -p1,2,3505
所有进程的命令行被截断到屏幕宽度:
→ ps -ef
所有进程的完整命令行:
→ ps -efww
以线程视图显示所有进程,子进程缩进在其父进程下面:
→ ps -efH
记住,你可以使用 grep
和其他过滤程序从 ps
的输出中更精细地提取信息:
→ ps -ux | grep 我的程序(原文:myprogram)
uptime
stdin stdout - file -- opt --help --version
uptime
uptime
命令告诉你自上次启动以来系统运行了多久:
→ uptime
10:54pm up 8 days, 3:44, 3 users,
load average: 0.89, 1.00, 2.15
这个信息,从头到尾是:当前时间(晚上10:54),系统运行时间(8天,3小时,44分钟),登录的用户数量(3),和三个时间段的系统平均负载:一分钟(0.89),五分钟(1.00),和十五分钟(2.15)。平均负载是在那个时间间隔内准备运行的进程的平均数量。
w
stdin stdout - file -- opt --help --version
w [用户名]
w
命令显示所有登录用户的每个 shell 中正在运行的当前进程:
→ w
10:51pm up 8 days, 3:42, 8 users,
load average: 2.02, 3.79, 5.44
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
barrett pts/0 :0 Sat 2pm 27:13m 0.07s 0.07s emacs
jones pts/1 host1 6Sep03 2:33m 0.74s 0.21s bash
smith pts/2 host2 6Sep03 0.00s 13.35s 0.04s w
顶部的行就是 uptime
输出的那一行。各列表示用户的终端,源主机或者 X 显示(如果适用),登录时间,空闲时间,两个 CPU 时间的度量(运行 man w
了解详情),和当前进程。提供一个用户名就可以看到那个用户的信息。
如果想要最简洁的输出,尝试 w -hfs
。
实用选项
-h | 不打印头行。 |
-f | 不打印 FROM 列。 |
-s | 不打印 JCPU 和 PCPU 列。 |
top
stdin stdout - file -- opt --help --version
top [选项]
top
命令让你能够监控最活跃的进程,定期(比如,每秒)更新显示。这是一个基于屏幕的程序,可以交互式地实时更新显示:
→ top
94 processes: 81 sleeping, 1 running, 0 zombie,
11 stopped
CPU states: 1.1% user, 0.5% system, 0.0% nice,
4.5% idle
Mem: 523812K av, 502328K used, 21484K free, ...
Swap: 530104K av, 0K used, 530104K free
115300K cached
PID USER PRI NI SIZE SHARE STAT %CPU %MEM TIME CMD
26265 smith 10 0 1092 840 R 4.7 0.2 0:00 top
1 root 0 0 540 472 S 0.0 0.1 0:07 init
914 www 0 0 0 0 SW 0.0 0.0 0:00 httpd
当 top
在运行时,你可以按键来改变它的行为,比如设置更新速度(s
),隐藏空闲进程(i
)或杀死进程(k
)。输入 h
查看完整列表,输入 q
退出。如果你想要查看类似的程序以监控你的系统 I/O 和网络带宽,可以尝试 iotop
和 iftop
。
有用的选项
-n N | 执行 N 次更新,然后退出。 |
-d N | 每 N 秒更新一次显示。 |
-p N -p M ... | 只显示 PID 为 N ,M 等,最多20个进程的信息。 |
-c | 显示进程的命令行参数。 |
-b | 非交互式地在标准输出上打印,不进行屏幕操作。top -b -n1 > outfile 将快照保存到一个文件中。 |
free
stdin stdout - file -- opt --help --version
free [options]
free
命令以千字节显示内存使用情况:
→ free
total used free shared buffers cached
Mem: 523812 491944 31868 0 67856 199276
-/+ buffers/cache: 224812 299000
Swap: 530104 0 530104
Linux 内核会为缓存目的保留尽可能多的内存,所以你在上面的输出中对可用 RAM 的最佳估计是在 buffers/cache
行的 free
列(例如,299000K)。
有用的选项
-s N | 持续运行,并每 N 秒更新一次显示。 |
-b | 以字节为单位显示数值。 |
-m | 以兆字节为单位显示数值。 |
-t | 在底部添加一个总计行。 |
-o | 不显示 “buffers/cache” 行。 |
推荐阅读
你好,我是拾叁,7年开发老司机、互联网两年外企5年。怼得过阿三老美,也被PR comments搞崩溃过。这些年我打过工,创过业,接过私活,也混过upwork。赚过钱也亏过钱。一路过来,给我最深的感受就是不管学什么,一定要不断学习。只要你能坚持下来,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯和编程知识,帮你积累弯道超车的资本。