经常在 Linux 系统中使用 top 命令查看系统系统各种资源的占用数据,有些参数实在疑惑,故写此博客汇总写。
top命令窗口
top - 15:57:32 up 165 days, 20:29,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  76 total,   1 running,  75 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1014836 total,   130316 free,   160796 used,   723724 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   691668 avail Mem
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
14514 root      10 -10  130348  12556   7468 S  0.7  1.2 273:21.86 AliYunDun
    1 root      20   0  191048   3740   2252 S  0.0  0.4  20:36.16 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.06 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   2:03.52 ksoftirqd/0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S  0.0  0.0  23:14.34 rcu_sched
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain
   11 root      rt   0       0      0      0 S  0.0  0.0   0:50.62 watchdog/0
   13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
   14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns
   15 root      20   0       0      0      0 S  0.0  0.0   0:03.50 khungtaskd
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset
   19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset
   20 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset
- 第一行
- top - 15:57:32 up 165 days, 20:29 : 系统已经运行的时间,也可以用 uptime查看
- 1 user : 当前登录用户
- load average: 0.00, 0.01, 0.05 : 分别表示系统1分钟平均负载、5分钟平均负载、15分钟平均负载
 
- 第二行 Tasks 表示系统运行的整体进程数量和状态信息
- total 表示系统现在一共有多少个用户进程
- running 表示正在处于running状态的进程
- sleeping 表示正处于sleeping状态的进程
- stopped 表示正处于stopped状态的进程
- zombie 表示僵尸进程的格式
 
- 第三行 %Cpu(s) 表示的是总体CPU使用情况
- us, user表示用户态的CPU时间比例
- sy, system表示内核态的CPU时间比例,间接表示内核消耗在- 硬件服务和- 软件中断上的时间
- ni, nice表示运行低优先级进程的CPU时间比例
- id, idle表示空闲CPU时间比例
- wa, iowait表示处于IO等待的CPU时间比例
- hi, hard interrupt表示处理硬中断的CPU时间比例
- si, soft interrupt表示处理软中断的CPU时间比例
- st, steal time表示当前系统运行在虚拟机中的时候,被其他虚拟机占用的CPU时间比例
 
- 第四行 Mem 内存情况,单位为 KiB
- 第五行 Swap 内存情况,单位为 KiB
- 第六行个别参数:
- PID进程ID
- USER进程所有者的用户名,例如root
- PR进程调度优先级
- NI进程nice值(优先级),越小的值代表越高的优先级,参考使用nice 修改程序的优先级
- VIRT(virtual memory usage)进程使用的虚拟内存
- RES(resident memory usage)进程使用的物理内存(不包括共享内存)
- SHR(shared memory)进程使用的共享内存
- S表示进程的运行状态,Z 表示该进程是僵尸进程
- CPU进程使用的CPU占比
- MEM进程使用的内存占比
- TIME进程启动后到现在所用的全部CPU时间
- COMMAND进程的启动命令(默认只显示二进制,top -c能够显示命令行和启动参数)
- DATA:数据占用的内存。如果top没有显示,按f键可以显示出来。这一块是真正的该程序要求的数据空间,是真正在运行中要使用的。
 
因此,DATA的含义比较确定,甚至可以用程序读取的数据量计算出来;SHR是一个潜在的可能会被共享的数字,如果只开一个程序,也没有别人共同使用它;VIRT里面的可能性更多,比如它可能计算了被许多X的库所共享的内存;RES应该是比较准确的,但不含有交换出去的空间;但基本可以说RES是程序当前使用的内存量。
交互式命令
- f或者F 从当前显示中添加或者删除项目
- o或者O 改变显示项目的顺序
- l 切换显示平均负载和启动时间信息
- m 切换显示内存信息
- t 切换显示进程和CPU状态信息
- c 切换显示命令名称和完整命令行
- M 根据驻留内存大小进行排序
- P 根据CPU使用百分比大小进行排序
- 按1切换过程查看单个 cpu详情模式
僵尸进程
如何查找僵尸(Defunct)进程
ps -ef | grep defunct | grep -v grep
消灭僵尸进程的方法
- 找到僵尸进程的父进程pid(pstress可以显示进程父子关系),kill -9 pid,父进程退出后init自动会清理僵尸进程。(需要注意的是kill -9并不能杀死僵尸进程)
- 重启系统
其他
- 
      btop 比 top 好用的资源监控器
    
- 
      htop Linux信息工具介绍