首页 > 编程笔记 > Linux笔记 阅读:31

Linux top命令的用法(超级详细)

top 命令用于动态地持续监听进程的运行状态,而且可以查看系统的健康状态,其格式如下:
[root@localhost ~]# top [选项]
选项:
-d 秒数:指定 top 命令每隔几秒更新。默认为三秒
-b:使用批处理模式输出。一般和 “-n” 选项合用,用于把 top 命令重定向到文件中
-n 次数:指定 top 命令执行的次数。一般和 “-b” 选项合用
-p:指定 PID。只查看某个 PID 的进程
-S:使 top 命令在安全模式中运行,避免在交互模式中出现错误
-u 用户名:只监听某个用户的进程
top 交互模式中可执行的命令:
? 或 h:显示交互模式的帮助
P:按照 CPU 的使用率排序,默认就是此选项
M:按照内存的使用率排序
N:按照 PID 排序
T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序
k:按照 PID 给予某个进程一个信号。一般用于终止某个进程,信号 9 是强制终止的信号
r:按照 PID 给某个进程重设优先级(Nice)值
q:退出 top 命令

我们看看 top 命令的执行结果,具体如下:
[root@localhost ~]# top
top - 15:22:13 up 2:06,  7 users,  load average: 0.00, 0.00, 0.00
Tasks: 168 total,   1 running, 167 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.0 hi,  6.2 si,  0.0 st
MiB Mem :  929.2 total,  346.3 free,  512.1 used,  223.4 buff/cache
MiB Swap:  256.0 total,  256.0 free,    0.0 used,  417.1 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR  S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0  107192  16712  10180  S   0.0  1.8   0:01.07 systemd
    2 root      20   0       0      0      0  S   0.0  0.0   0:00.00 kthreadd
    3 root       0 -20       0      0      0  I   0.0  0.0   0:00.00 rcu_gp
    4 root       0 -20       0      0      0  I   0.0  0.0   0:00.00 rcu_par_gp
    5 root       0 -20       0      0      0  I   0.0  0.0   0:00.00 netns
...省略部分输出...
下面解释一下命令的输出。top 命令的输出内容是动态的,默认每隔三秒刷新一次。命令的输出主要分为两部分:
我们先来说明第一部分的作用:
1) 第一行为任务队列信息,具体内容如下表所示:

表:任务队列信息
内容 说明
15:22:13 系统当前时间
up 2:06 系统已运行 2 小时 6 分钟
7 users 当前登录了 7 个用户
load average: 0.00, 0.00, 0.00 1/5/15 分钟平均负载;单核超过 1、四核超过 4 为高负载

2) 第二行为进程信息,具体内容如下表所示:

表:进程信息
内容 说明
Tasks: 168 total 系统中进程总数
1 running 正在运行的进程数
167 sleeping 睡眠的进程数
0 stopped 正在停止的进程数
0 zombie 僵尸进程数;不为 0 需手工检查

3) 第三行为 CPU 信息,具体内容如下表所示:

表:CPU 信息
内容 说明
0.0 us 用户模式占用的 CPU 百分比
0.0 sy 系统模式占用的 CPU 百分比
0.0 ni 改变过优先级的用户进程占用的 CPU 百分比
93.8 id 空闲 CPU 百分比
0.0 wa 等待 I/O 的进程占用的 CPU 百分比
0.0 hi 硬中断请求服务占用的 CPU 百分比
6.2 si 软中断请求服务占用的 CPU 百分比
0.0 st 当存在虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比(steal time)

4) 第四行为物理内存信息,具体内容如下表所示:

表:物理内存信息
内容 说明
929.2 total 物理内存总量(MB)
346.3 free 空闲物理内存数量
512.1 used 已使用物理内存数量
223.4 buff/cache 用作缓冲/缓存的内存数量

5) 第五行为交换分区信息,如下表所示:

表:交换分区信息
内容 说明
256.0 total Swap 总大小(MB)
256.0 free 空闲 Swap 大小
0.0 used 已使用 Swap 大小
417.1 avail Mem 可用内存(包含可回收缓存)

我们通过 top 命令的第一部分就可以判断服务器的健康状态:
我们还要解释一下缓存(Cache)和缓冲(Buffer)的区别:
简单来说,缓存是用来加速从硬盘中“读取”数据的,而缓冲是用来加速数据“写入”硬盘的。

再来看 top 命令的第二部分输出,主要是系统进程信息。这部分和 ps 命令的输出比较类似,只是如果在终端执行 top 命令,就不能看到所有的进程,只能看到占比靠前的进程。

top 命令的第二部分主要为以下内容:
接下来举几个 top 命令常用的实例。例如,只想让 top 命令查看某个进程,就可以使用“-p”选项,命令如下:
[root@localhost ~]# top -p 1515
# 只查看 PID 为 1515 的 httpd 进程
top - 15:40:13 up 2:24,  7 users,  load average: 0.00, 0.00, 0.00
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem : 929.2 total, 386.9 free, 471.5 used, 223.4 buff/cache
MiB Swap: 256.0 total, 256.0 free,   0.0 used, 457.7 avail Mem

  PID USER  PR  NI   VIRT  RES  SHR S %CPU %MEM  TIME+ COMMAND
1515 root  20   0   6908 4836 4016 S  0.0  0.5  0:00.27 httpd

top 命令如果不正确退出,就会持续运行。在 top 命令的交互界面中按“q”键会退出 top 命令,也可以按“?”键或“h”键得到 top 命令交互界面的帮助信息,还可以按“k”键终止某个进程,具体命令如下:
[root@localhost ~]# top
top - 15:41:18 up 2:25, 7 users, load average: 0.00, 0.00, 0.00
Tasks: 166 total, 1 running, 165 sleeping, 0 stopped, 0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem : 929.2 total, 386.9 free, 471.5 used, 223.4 buff/cache
MiB Swap: 256.0 total, 256.0 free, 0.0 used, 457.7 avail Mem
PID to signal/kill [default pid = 1] 1515   ← 按 “k” 键,会提示输入要终止进程的 PID
PID USER  PR  NI    VIRT  RES  SHR S %CPU %MEM TIME+ COMMAND
    1 root  20   0  107192 16712 10180 S  0.0  1.8 0:01.07 systemd
...省略部分输出...

输入要终止进程的 PID,例如,要终止 1515 这个 apache 进程,接下来会要求输入终止信号,我们这里输入信号“9”,代表强制终止,具体命令如下:
top - 15:41:18 up 2:25, 7 users, load average: 0.00, 0.00, 0.00
Tasks: 166 total, 1 running, 165 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 929.2 total, 386.9 free, 471.5 used, 223.4 buff/cache
MiB Swap: 256.0 total, 256.0 free, 0.0 used, 457.7 avail Mem
Send pid 1515 signal [15/sigterm] 9   ← 提示输入信号,信号 9 代表强制终止
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
...省略部分输出...
这时就能够强制终止 1515 进程了。

如果想要改变某个进程的优先级,就要利用“r”交互命令。需要注意的是,我们能够修改的只有 Nice 的优先级,不能修改 Priority 的优先级。具体修改命令如下:
[root@localhost ~]# top -p 1083
top - 15:54:08 up 8 min, 1 user, load average: 0.00, 0.00, 0.00
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 929.2 total, 495.1 free, 434.2 used, 143.1 buff/cache
MiB Swap: 256.0 total, 256.0 free, 0.0 used, 494.9 avail Mem
PID to renice [default pid = 1083]   ← 输入 “r” 交互命令,提示输入要修改优先级的 PID
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1083 root 20 0 193847 428 35100 S 0.0 0.8 0:00.01 sshd

输入“r”交互命令,会提示输入需要修改优先级的进程的PID,因为我们使用“-p”选项来指定显示 1083 进程,所以这里可以直接按 Enter 键,当然也可以手工输入该进程的 PID。之后就可以输入 Nice 值,数值越低,优先级越高,具体命令如下:
Renice PID 1083 to value 10   ← 输入 Nice 优先级号
#按 Enter 后生效:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1083 root 30 10 193847 428 35100 S 0.0 0.8 0:00.01 sshd
# 1083 进程的优先级被修改了

如果在操作终端执行 top 命令,那么并不能看到系统中所有的进程,默认看到的只是 CPU 占比靠前的进程。如果想要看到所有的进程,那么可以把 top 命令的执行结果重定向到文件中。

不过 top 命令是持续运行的,这时就需要使用“-b”和“-n”选项了,具体命令如下:
[root@localhost ~]# top -b -n 1 > /root/top.log
# 让 top 命令只执行一次,然后把执行结果保存到 /root/top.log 文件中,这样就能看到所有的进程了

相关文章