Linux top命令的用法(超级详细)
top 命令用于动态地持续监听进程的运行状态,而且可以查看系统的健康状态,其格式如下:
我们看看 top 命令的执行结果,具体如下:
我们先来说明第一部分的作用:
1) 第一行为任务队列信息,具体内容如下表所示:
2) 第二行为进程信息,具体内容如下表所示:
3) 第三行为 CPU 信息,具体内容如下表所示:
4) 第四行为物理内存信息,具体内容如下表所示:
5) 第五行为交换分区信息,如下表所示:
我们通过 top 命令的第一部分就可以判断服务器的健康状态:
我们还要解释一下缓存(Cache)和缓冲(Buffer)的区别:
简单来说,缓存是用来加速从硬盘中“读取”数据的,而缓冲是用来加速数据“写入”硬盘的。
再来看 top 命令的第二部分输出,主要是系统进程信息。这部分和 ps 命令的输出比较类似,只是如果在终端执行 top 命令,就不能看到所有的进程,只能看到占比靠前的进程。
top 命令的第二部分主要为以下内容:
接下来举几个 top 命令常用的实例。例如,只想让 top 命令查看某个进程,就可以使用“-p”选项,命令如下:
top 命令如果不正确退出,就会持续运行。在 top 命令的交互界面中按“q”键会退出 top 命令,也可以按“?”键或“h”键得到 top 命令交互界面的帮助信息,还可以按“k”键终止某个进程,具体命令如下:
输入要终止进程的 PID,例如,要终止 1515 这个 apache 进程,接下来会要求输入终止信号,我们这里输入信号“9”,代表强制终止,具体命令如下:
如果想要改变某个进程的优先级,就要利用“r”交互命令。需要注意的是,我们能够修改的只有 Nice 的优先级,不能修改 Priority 的优先级。具体修改命令如下:
输入“r”交互命令,会提示输入需要修改优先级的进程的PID,因为我们使用“-p”选项来指定显示 1083 进程,所以这里可以直接按 Enter 键,当然也可以手工输入该进程的 PID。之后就可以输入 Nice 值,数值越低,优先级越高,具体命令如下:
如果在操作终端执行 top 命令,那么并不能看到系统中所有的进程,默认看到的只是 CPU 占比靠前的进程。如果想要看到所有的进程,那么可以把 top 命令的执行结果重定向到文件中。
不过 top 命令是持续运行的,这时就需要使用“-b”和“-n”选项了,具体命令如下:
[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 信息,具体内容如下表所示:
内容 | 说明 |
---|---|
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 命令的第一部分就可以判断服务器的健康状态:
- 如果系统在之前 1 分钟、5 分钟、15 分钟的平均负载高于 1,就证明系统压力较大;
- 如果 CPU 的使用率过高或空闲率过低,就证明系统压力较大;
- 如果物理内存的空闲内存过小,就证明系统压力较大。这时就应该判断是什么进程占用了系统资源,如果是不必要的进程,就应该结束这些进程;
- 如果是必备进程,就应该增加服务器资源(如增加虚拟机内存),或者建立集群服务器。
我们还要解释一下缓存(Cache)和缓冲(Buffer)的区别:
- 缓存是指在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,这样再次读取该数据时,就不去硬盘中读取,而在缓存中直接读取。
- 缓冲是指在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
简单来说,缓存是用来加速从硬盘中“读取”数据的,而缓冲是用来加速数据“写入”硬盘的。
再来看 top 命令的第二部分输出,主要是系统进程信息。这部分和 ps 命令的输出比较类似,只是如果在终端执行 top 命令,就不能看到所有的进程,只能看到占比靠前的进程。
top 命令的第二部分主要为以下内容:
- PID:进程的 ID;
- USER:该进程所属的用户;
- PR:优先级,数值越小,优先级越高;
- NI:优先级,数值越小,优先级越高;
- VIRT:该进程使用的虚拟内存的大小,单位为 KB;
- RES:该进程使用的物理内存的大小,单位为 KB;
- SHR:共享内存大小,单位为 KB;
- S:进程状态;
- %CPU:该进程占用的 CPU 百分比;
- %MEM:该进程占用的内存百分比;
- TIME+:该进程共占用的 CPU 时间;
- COMMAND:产生该进程的命令名。
接下来举几个 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 文件中,这样就能看到所有的进程了