top命令几乎是每个程序员都会用到的Linux命令。这个命令用来查看Linux系统的综合性能,比如CPU使用情况,内存使用情况。这个命令能帮助我快速定位程序的性能问题。但是之前对于这个命令的使用几乎仅限于查看下哪个进程使用的CPU最高,哪个进程占用的内存最高。对于输出的各个参数的含义也是一知半解,更不用说top的一些高级用法了。
top输出参数的含义
[root@VM-0-15-centos ~]# top
top - 23:02:15 up 45 days, 10:05, 1 user, load average: 0.15, 0.05, 0.06
Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1882752 total, 90700 free, 262008 used, 1530044 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1434172 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8353 root 20 0 202272 41900 3128 S 0.3 2.2 68:52.39 YDService
8476 root 20 0 611528 13472 1960 S 0.3 0.7 104:09.31 barad_agent
第一行表示系统的运行时间和平均负载
top - 23:02:15 up 45 days, 10:05, 1 user, load average: 0.15, 0.05, 0.06
- 23:02:15 15:34:12 表示系统的当前时间;
- up 45 days 表示这个Linux系统已经启动45天
- 1 user 表示当前有两个用户登陆系统
- load average: 0.15, 0.05, 0.06
最近1、5和15分钟内的平均负载 现实生产中,不会让负载数值/CPU核数任意接近1的。一般当这个值达到0.8或者0.9时就需要分析分析原因了
第二行表示任务信息
Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie
Tasks — 任务(进程),系统现在共有73个进程,其中处于运行中的有2个,71个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
按t 可以关闭显示这个任务信息,再按下 t 可以开启这个任务信息
第三行表示CPU状态
%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- us 列显示了用户模式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的 CPU 时间多,但是如果长期大于50%,需要考虑优化用户的程序
- sy 列显示了内核进程所花费的 CPU 时间的百分比。这里
us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足
。 - ni 列显示了用户进程空间内改变过优先级的进程占用CPU百分比。
- id 列显示了 CPU 处在空闲状态的时间百分比。
- wa 列显示了IO等待所占用的CPU时间的百分比。这里
wa 的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。 这个wa和vmstat中的wa是相同含义。
- hi 硬件中断占用CPU
- si 软件中断占用CPU
- st 丢失时间占用CPU
在后台开发中需要关注us,sy,id,wa等常用指标。
第四、五行内存使用情况#
KiB Mem : 1882752 total, 90700 free, 262008 used, 1530044 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1434172 avail Mem
第六行以下 进程的状态监控
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8353 root 20 0 202272 41900 3128 S 0.3 2.2 68:52.39 YDService
8476 root 20 0 611528 13472 1960 S 0.3 0.7 104:09.31 barad_agent
- PID:进程ID,进程的唯一标识符
- USER:进程所有者的实际用户名。
- PR:进程的调度优先级。这个字段的一些值是’rt’。这意味这这些进程运行在实时态。
- NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
- VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
- RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
- SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
- S:这个是进程的状态。它有以下不同的值:
- D - 不可中断的睡眠态。
- R – 运行态
- S – 睡眠态
- T – 被跟踪或已停止
- Z – 僵尸态
- %CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
- %MEM:进程使用的可用物理内存百分比。
- TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
- COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)
还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。 按下 f
键盘可以调出更多显示选项。按esc键返回top显示页。
top的一些命令行参数
- -b:批处理模式(batch mode),可输出到管道、文件。默认情况下-b会一直输出
- -n N:限制输出次数,可以用-nN指定输出次数。 top -n 5输出5次
- -d N:刷新时间间隔。
- -p PID:监控指定进程。
- -Hp PID:监控指定进程和进行内线程信息。(比较常用)
top一些交互键的说明
进入top页面后,我们可以进行一些交互操作。下面是一些交互键的说明:
c 显示完整的命令名。c为Command之意。
d 修改刷新时间。d为Display之意。
u 显示指定用户相关进程。u为User之意。
P 按CPU使用排序。P为Processor(处理器)之意。
M 按内存使用排序。M为Momery之意。
F 排序(进入新的界面,并选择排序的目标字段)。
R 顺序或逆序。
H 显示线程
Z 以多色彩显示top。
摘自:https://www.cnblogs.com/54chensongxia/p/12330592.html