截取部分top输出内容
top - 17:49:41 up 59 days, 15:53, 2 users, load average: 0.07, 0.05, 0.05
Tasks: 112 total, 1 running, 109 sleeping, 0 stopped, 2 zombie
%Cpu(s): 1.5 us, 0.7 sy, 0.0 ni, 97.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881840 total, 80768 free, 873712 used, 927360 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 822596 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3493 root 20 0 680300 14288 2076 S 0.7 0.8 250:01.91 barad_agent
6493 root 20 0 1033692 36720 18684 S 0.7 2.0 23:03.33 YDService
6816 root 20 0 1157576 6984 3168 S 0.3 0.4 0:29.40 sh
1 root 20 0 51936 3904 2428 S 0.0 0.2 14:00.27 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:02.17 kthreadd
系统资源信息
前5行为系统资源信息,逐行进行解释。
1、第一行
- 17:49:41:系统当前时间
- up 59 days, 15:53:系统运行时间,本次已运行59天15时53分
- 2 users:当前登陆用户
- load average: 0.07, 0.05, 0.05:过去1、5、15分钟的系统平均负荷
如何根据load average判断CPU的负载程度?
- 查看CPU的Processor数量:cat /proc/cpuinfo |grep “cpu core”|wc -l
- 如果负载值超过核心处理器数量,一般认为是高负载。如:核心处理器数量为4,load average的值在4的左右浮动,就是高负载
如果是Mac系统,可以通过:sysctl -n machdep.cpu.core_count 查看CPU核心数(物理核)进行判断。
2、第二行(进程相关)
- Tasks: 112 total:总进程数
- 1 running:运行中进程数
- 109 sleeping:休眠进程数
- 0 stopped:正在停止的进程数
- 2 zombie:僵尸进程。不为0,需要进行排查
如何排查僵尸进程?
top命令查看是否存有僵尸进程
Tasks: 111 total, 1 running, 109 sleeping, 0 stopped, 1 zombie
%Cpu(s): 1.8 us, 0.8 sy, 0.0 ni, 97.2 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881840 total, 101172 free, 872336 used, 908332 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 823984 avail Mem
ps & grep命令配合根据进程状态查询出僵尸进程的信息(kill无效时,尝试kill父进程)
[root@VM-24-5-centos ~]# ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
Z 1968 32070 [python] <defunct>
[root@VM-24-5-centos ~]# kill -9 32070
[root@VM-24-5-centos ~]# ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
Z 1968 32070 [python] <defunct>
[root@VM-24-5-centos ~]# kill -9 1968
[root@VM-24-5-centos ~]# ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
[root@VM-24-5-centos ~]#
top命令再次检测是否kill成功
top - 18:21:30 up 59 days, 16:25, 2 users, load average: 0.06, 0.07, 0.06
Tasks: 110 total, 1 running, 109 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.5 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881840 total, 132628 free, 840740 used, 908472 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 855580 avail Mem
3、第三行(CPU占用率相关,如果有多CPU会展示多行,交互式命令1可以查看)
- 1.5 us:用户空间进程所占CPU百分比
- 0.7 sy:内核空间进程所占CPU百分比
- 0.0 ni:用户进程空间内变更过进程优先级的进程占用CPU百分比
- 97.8 id:空闲CPU百分比
- 0.0 wa:等待输入/输出的进程的占用CPU百分比
- 0.0 hi:硬中断占用的CPU百分比
- 0.0 si:软中断占用的CPU百分比
- 0.0 st:虚拟机占用CPU百分比。当有虚拟机时,虚拟CPU实际等待CPU的时间百分比
4、第四行(物理内存相关,按m键进入可视化显示)
- KiB:计量单位,kilo binary bit的缩写,1KiB = 1024B,1Ki = 1024,1K = 1000
- 1881840 total:总量
- 80768 free:可使用
- 873712 used:已使用
- 927360 buff/cache:已缓存
5、第五行(交换分析相关,按m键进入可视化显示)
进程信息
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3493 root 20 0 680300 14288 2076 S 0.7 0.8 250:01.91 barad_agent
6493 root 20 0 1033692 36720 18684 S 0.7 2.0 23:03.33 YDService
6816 root 20 0 1157576 6984 3168 S 0.3 0.4 0:29.40 sh
1 root 20 0 51936 3904 2428 S 0.0 0.2 14:00.27 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:02.17 kthreadd
top命令查询出的进程信息默认根据CPU占用率从高到低排序展示
- PID:进程ID
- USER:所属用户的用户名
- PR:优先级(值越小优先级越高)
- NI:优先级(值越小优先级越高)
- VIRT:使用的虚拟内存的大小(单位KB)。VIRT=SWAP+RES,SWAP:(进程使用的虚拟内存中被换出的大小)
- RES:使用的未被换出的物理内存的大小(单位KB)
- SHR:共享内存大小(单位KB)
- S:状态
- %CPU:占用CPU的百分比
- %MEM:总共占用内存的百分比
- TIME+:总共占用的CPU时间
- COMMAND:产生进程的命令
交互式命令
只列举了部分交互式命令
- E:更改系统资源信息中的内存单位(KB、MB、GB、TB、PB)
- e:更改进程信息中的内存单位(KB、MB、GB、TB、PB)
- 数字1:显示所有cpu情况(默认只展示一条)
- x:高亮显示根据哪一列熟悉进行排序
- </>:修改排序的字段(默认根据CPU)
- n:输入每次要展示的进程信息行数
- H:展示线程信息的开关
常用参数(持续补充)
- -d:top结果的更新速度,单位为秒
- -n:设定显示top结果的次数,随后自动退出命令
- -b:批处理模式,不进入交互式模式
- -p:指定需要展示的进程ID
- -H:显示线程信息(配合-p参数使用,类似ps命令的-T与H参数)
实际应用(持续补充)
1、查看top中的所有的进程信息
交互式中top命令只会展示部分进程信息,如果想要查看所有的进程信息,可以:
top -b -n > out.log
将一次top的完整结果输出到文件中
2、查看进程的线程信息
top -H -p {PID}