top命令是Linux系统下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。它是一个动态显示过程,执行该命令后,它展示的信息会将独占前台,直到用户终止该程序为止(可以用Ctrl + C终止)。
top命令结果详解
当我们输入top命令后,屏幕就会出现以下数据
第一行显示的是服务器整体信息
top - 15:47:34 up 64 days, 1:26, 5 users, load average: 29.83, 28.93, 24.51
含义分别为:
- 15:47:34 — 系统当前时间
- up 64 days, 1:26, — 系统已经运行了64天1小时26分钟
- 5 users, — 当前有5个用户正在登录
- load average: 29.83, 28.93, 24.51 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
load average<0.7 * processor(CPU线程数) 表示当前系统运行良好;
1 * processor<load average<3 * processor,需要参考内存、CPU、网络和IO等指标;
load average>5 * processor 表示负载过大;
实时负载通过r+d来计算
第二行显示的是任务进程信息
Tasks: 1287 total, 1 running, 1282 sleeping, 0 stopped, 4 zombie
含义为:系统现在共有1278个进程,其中处于运行中(running)的有1个,1282个在休眠(sleep),停止状态(stope的)的有0个,zombie状态(僵尸)的有4个。
第三行显示的是CPU状态信息
%Cpu(s): 1.7 us, 1.3 sy, 0.0 ni, 96.9 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
- 1.7%us — 用户空间占用CPU的百分比。
- 1.3% sy — 内核空间占用CPU的百分比。系统进程CPU使用占比,内核态CPU使用率。
- 0.0% ni — 改变过优先级的进程占用CPU的百分比
- 96.9% id — 空闲CPU百分比
- 0.0% wa — IO等待占用CPU的百分比
- 0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
- 0.1% si — 软中断(Software Interrupts)占用CPU的百分比
- 0.0%st — 虚拟机占用CPU的百分比
si 是从网卡过来的数据包多(收发包多),如果si高,则看网络收发包高的进程。一般硬件中断可以分析文件/proc/interrupts,/proc/irq/pid/smp_affinity、服务irqbalance是否配置,以及CPU的频率设置,通过这些可以帮助系统打散优化系统的硬件中断。
hi 使用率过高时,表示当前硬件中断占用很大的百分比。
wa:使用过高时,要考虑IO的性能是否有瓶颈,可以使用iostat,sar命令进一步分析
可以使用命令查看硬件中断:
cat /proc/interrupts > hil.txt
sleep 2
cat /proc/interrupts > hi2.txt
vimdiff hil.txt hi2.txt
或者
/proc/interrupts > hil.txt
sleep 2
cat /proc/interrupts > hi2.txt
默认情况下显示的是所有CPU的平均值,如果想看每个CPU具体值,则按下数字1
即可,返回这个界面,再按一次数字1
第四行显示的是系统的内存信息
KiB Mem : 39406275+total, 3895844 free, 10708065+used, 28308627+buff/cache
- Mem 39406275+total:物理内存的总量
- Mem 3895844 free:物理内存的空闲量
- Mem 10708065+used:物理内存使用量
- Mem 28308627+buff/cache:物理内存内核缓存使用量
第五行显示的是swap交换分区信息
KiB Swap: 0 total, 0 free, 0 used. 28355382+avail Mem
- total:交换区总量
- free:交换区空闲量
- used:交换区使用量
- avail Mem:虚拟内存总量
第六行空行
第七行
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- PID — 进程ID
- USER — 进程所有者
- PR — 进程优先级
- NI — nice值
- VIRT — 进程所占虚拟内存大小???
- RES — 进程所占物理内存大小(kb)
- SHR — 进程所占共享内存大小(kb)
- %CPU — CPU占用百分比
- %MEM — 物理内存占用百分比
- TIME+ — 上次更新到现在进程使用的CPU时间总计
- COMMAND— 启动该进程的命令
top命令参数
- -b 批处理
- -c 显示完整的治命令
- -I 忽略失效过程
- -s 保密模式
- -S 累积模式
- -i<时间>设置间隔时间
- -u<用户名>指定用户名
- -p<进程号>指定进程
- -n<次数>循环显示的次数
小技巧
间隔刷新
进入top后按下d,即可设置间隔刷新时间,默认是3秒。
添加进程监控字段
进入top后按下f,即可添加/减少需要监控的进程信息。
* PID = Process Id vMn = Minor Faults delta
* USER = Effective User Name USED = Res+Swap Size (KiB)
* PR = Priority nsIPC = IPC namespace Inode
* NI = Nice Value nsMNT = MNT namespace Inode
* VIRT = Virtual Image (KiB) nsNET = NET namespace Inode
* RES = Resident Size (KiB) nsPID = PID namespace Inode
* SHR = Shared Memory (KiB) nsUSER = USER namespace Inode
* S = Process Status nsUTS = UTS namespace Inode
* %CPU = CPU Usage
* %MEM = Memory Usage (RES)
* TIME+ = CPU Time, hundredths
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
RUID = Real User Id
RUSER = Real User Name
SUID = Saved User Id
SUSER = Saved User Name
GID = Group Id
GROUP = Group Name
PGRP = Process Group Id
前面有*的说明已经显示了。
保存设置
对top进行设置后,默认是不保存配置的,只有按了大写的W后才会保存。
监控结果输出到文件
top -d 1 -n 3 > top.log
参考文章:服务器中使用Top命令后,参数解释_top命令的cpu占用率怎么算的_敢敢J的憨憨L的博客-CSDN博客
Linux服务器硬件情况的查看_系统运维_内存溢出