查看原文
其他

精通Linux系列十五:系统负载400%,如何排查?

拾叁 更AI 2023-10-21

精通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 -程序名称(原文: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 命令显示所有登录用户的每个 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

有用的选项

-nN执行 N  次更新,然后退出。
-dN每 N  秒更新一次显示。
-pN -pM ...只显示 PID 为 NM 等,最多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。赚过钱也亏过钱。一路过来,给我最深的感受就是不管学什么,一定要不断学习。只要你能坚持下来,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯和编程知识,帮你积累弯道超车的资本。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存