语法
top [-][d num] [q] [c] [S] [s] [I] [n] [b] [p] [u]
参数详解
top - 15:39:17 up 225 days, 3:33, 1 user, load average: 11.972, 18.86, 20.29
Tasks: 617 total, 2 running, 613 sleeping, 1 stopped, 1 zombie
Cpu(s): 14.6%us, 4.7%sy, 1.5%ni, 78.1%id, 0.0%wa, 0.0%hi, 1.0%si, 0.0%st
Mem: 196317064k total, 83591344k used, 113725720k free, 1608152k buffers
Swap: 0k total, 0k used, 0k free, 19245824k cached
前5行:系统整体的统计信息
第一行是任务队列信息,同 uptime 命令的执行结果:
15:39:17—>系统当前时间
up 225 days—>系统运行天数,格式为时:分
3:33—>系统运行时间,格式为时:分
1 user—> 当前登录用户数
load average: 11.972, 18.86, 20.29—>系统负载,即任务队列的平均长度,三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
平均负载的值越小代表系统压力越小,越大则代表系统压力越大。通常,我们会以最后一个数值,也就是15分钟内的平均负载作为参考来评估系统的负载情况。
对于只有单核cpu的系统,1.0是该系统所能承受负荷的边界值,大于1.0则有处理需要等待。一个单核cpu的系统,平均负载的合适值是0.7以下。如果负载长期徘徊在1.0,则需要考虑马上处理了。超过1.0的负载,可能会带来非常严重的后果。多核cpu的系统是在前述值的基础上乘以cpu内核的个数。如对于多核cpu的系统,有N个核则所能承受的边界值为N.0。
可以使用如下命令来查看每个处理器的信息:cat/proc/cpuinfo
如果只想计算有多少个cpu内核,可以使用如下命令:cat /proc/cpuinfo |grep'model name'| wc -l
第二行是进程信息:
617 total—>进程总数
2 running—>正在运行的进程数
613 sleeping—>睡眠的进程数
1 stopped—>停止的进程数
1 zombie—>僵尸进程数
第三行是CPU信息:
14.6%us—>用户空间占用CPU百分比
4.7%sy—>内核空间占用CPU百分比
1.5%ni—>用户进程空间内改变过优先级的进程占用CPU百分比
78.1%id—>空闲CPU百分比
0.0%wa—>等待输入输出的CPU时间百分比
0.0%hi—>硬中断(Hardware IRQ)占用CPU的百分比
1.0%si—>软中断(Software Interrupts)占用CPU的百分比
0.0%st—>实时
第四行是MEM信息:
196317064k total—>物理内存总量
83591344k used—>使用的物理内存总量,指的是现在系统内核控制的内存数
113725720k free—>空闲内存总量,是内核还未纳入其管控范围的数量。
1608152k buffers—>用作内核缓存的内存量
纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。 如果出于习惯去计算可用内存数,有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:113725720k + 1608152k + 19245824k = 127GB左右。
第五行是交换区信息:
0k total—>交换区总量
0k used—>使用的交换区总量,对于内存监控,在top里需要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,说明真正的内存不够用了
0k free—>空闲交换区总量
19245824k cached—>缓存的交换区总量。内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
进程信息区
序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。D=不可中断的睡眠状态;R=运行;S=睡眠;T=跟踪/停止;Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h
参数说明
d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
s : 安全模式,将交谈式指令取消, 避免潜在的危机
i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
n : 更新的次数,完成后将会退出 top
b : 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内
u :指定用户名
p :指定进程
常用参数:
top #显示系统进程信息
top -b #以批处理模式显示程序信息
top -S #以累积模式显示程序信息
top -n 2 #设置信息更新次数,表示更新2次后终止更新显示
top -d -3 #设置信息更新时间,表示更新周期为3秒
top -p 1138 #显示进程号为1138的进程信息,CPU、内存占用率等
top -Hp 1138 #该进程下的各个线程运行情况
top交互命令
在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。
h:显示帮助画面,给出一些简短的命令总结说明;
k:终止一个进程;
i:忽略闲置和僵死进程,这是一个开关式命令;
q:退出程序;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
f/F:从当前显示中添加或者删除项目;
o/O:改变显示项目的顺序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中。
其他
1、在top界面按一下1,可以清晰得看到每个cpu的运行状态
Cpu(us)表示的是所有用户进程占用整个cpu的平均值,由于每个核心占用的百分比不同,所以按平均值来算比较有参考意义
%CPU显示的是进程占用一个核的百分比,而不是整个cpu(12核)的百分比,有时候可能大于100,那是因为该进程启用了多线程占用了多个核心,所以有时候我们看该值得时候会超过100%,但不会超过总核数*100
2、高亮显示当前运行进程
敲击键盘“b”(打开/关闭加亮效果),top的视图变化如下:
我们发现进程id为50791的“top”进程被加亮了,top进程就是视图第二行显示的唯一的运行态(runing)的那个进程,可以通过敲击'y'或'b'键关闭或打开运行态进程的加亮效果。
3、进程字段排序
默认进入top时,各进程是按照CPU的占用量来排序的,在下图中进程ID为2017的java进程排在第一(cpu占用277.4%),进程ID为6101的java进程排在第二(cpu占用250.2%)。
4、通过”shift + >”或”shift + <”可以向右或左改变排序列
下图是按一次”shift + >”的效果图,视图现在已经按照%MEM来排序。