Linux备忘录:top命令
top命令
命令行输入top
命令可查看服务器当前负载情况:
参数:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
H 开启线程模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
运行
top -bc | grep [Name]
可以抓取指定进程每一帧的显示;
如果需要运行时过滤,使用o
键,然后输入过滤器字符串COMMAND=xxx
,回车即可。继续按o
,新增过滤器;按u
,可过滤指定用户;按=
清除所有过滤器;top -p [PID]
查看指定进程top -Hp [PID]
查看执行进程的线程 (ps -Tp [PID]
也可查看进程的线程)
第一行:任务队列信息
当前系统时间;已经运行了17天5小时54分钟; 当前在线用户:11个; 平均负载:1.47, 1.39, 0.95 表示最近1分钟,5分钟,15分钟的系统平均负载,即任务队列的平均长度。系统负载的临界值与CPU个数有关,若只有一个CPU,则负载最好不超过1;若有32个CPU,则负载最好不超过32,以此类推。
第二行:进程信息
进程总数:314 正在运行进程数:1 睡眠进程数:3113 停止的进程数:0 僵尸进程数:0
第三行:CPU信息,当有多个CPU时,按 1 可以展开多行
用户空间占用CPU百分比: 2.9%us 内核空间占用CPU百分比: 1.0%sy 用户进程空间内改变过优先级的进程占用CPU百分比:0.0%ni 空闲CPU百分比:95.7%id 等待输入输出的CPU时间百分比:0.3%wa CPU服务软中断所耗费的时间总额:0.0%si Steal Time:0.0%st
第四行: 内存信息
物理内存总量:24740412k total 使用的物理内存总量:24542772k used 空闲内存总量:197640k free 用作内核缓存的内存量:205736k buffers
第五行: 交换区内存信息
交换区总量:4194300k total,使用的交换区总量:152k used,空闲交换区总量:4194148k free, 缓冲的交换区总量:14414168k cached
第六行: 进程信息
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
hPR
进程的优先级,数值越小,该进程的优先级越高,就越早被 CPU 执行。
iNI
nice值,进程优先级的偏移量,可以通过修改这个值调整进程的优先级,renice 或者 setpriority;
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb,按e调整显示单位。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
CPU参数详解 https://zhuanlan.zhihu.com/p/30096522
(us) user:CPU 在低 nice 值(高优先级)用户态所占用的时间(nice<=0)。正常情况下只要服务器不是很闲,那么大部分的 CPU 时间应该都在此执行这类程序
(sy) system:CPU 处于内核态所占用的时间,操作系统通过系统调用(system call)从用户态陷入内核态,以执行特定的服务;通常情况下该值会比较小,但是当服> 务器执行的 IO 比较密集的时候,该值会比较大
(ni) nice:CPU 在高 nice 值(低优先级)用户态以低优先级运行占用的时间(nice>0)。默认新启动的进程 nice=0,是不会计入这里的,除非手动通过 renice 或者 > setpriority() 的方式修改程序的nice值;nice值表示的是被降低优先级进程花费的cpu时间, 负值表示高优先级,正值表示低优先级;
(id) idle:CPU 在空闲状态(执行 kernel idle handler )所占用的时间
(wa) iowait:等待 IO 完成做占用的时间
(hi) irq:系统处理硬件中断所消耗的时间
(si) softirq:系统处理软中断所消耗的时间,记住软中断分为 softirqs、tasklets (其实是前者的特例)、work queues,不知道这里是统计的是哪些的时间,毕竟 work queues 的执行已经不是中断上下文了
(st) steal:在虚拟机情况下才有意义,因为虚拟机下 CPU 也是共享物理 CPU 的,所以这段时间表明虚拟机等待 hypervisor 调度 CPU 的时间,也意味着这段时间 hypervisor 将 CPU 调度给别的 CPU 执行,这个时段的 CPU 资源被“stolen”了。这个值在我 KVM 的 VPS 机器上是不为 0 的,但也只有 0.1 这个数量级,是不是可以用来判断 VPS 超售的情况?
僵尸进程:一个进程通过fork指令生成子进程,fork()方法在两个进程中分别返回。子进程返回0,父进程返回子进程的pid。父进程还没有调用wait方法时,子进程已经终止,则子进程变成僵尸进程。只有父进程结束后才能回收该子进程。
排查CPU问题的流程:
CPU 占用率高很多情况下意味着一些东西,这也给服务器 CPU 使用率过高情况下指明了相应地排查思路:
- 当 user 占用率过高的时候,通常是某些个别的进程占用了大量的 CPU,这时候很容易通过 top 找到该程序;此时如果怀疑程序异常,可以通过 perf 等思路找出热点调用函数来进一步排查;
- 当 system 占用率过高的时候,如果 IO 操作(包括终端 IO)比较多,可能会造成这部分的 CPU 占用率高,比如在 file server、database server 等类型的服务器上,否则(比如>20%)很可能有些部分的内核、驱动模块有问题;
- 当 nice 占用率过高的时候,通常是有意行为,当进程的发起者知道某些进程占用较高的 CPU,会设置其 nice 值确保不会淹没其他进程对 CPU 的使用请求;
- 当 iowait 占用率过高的时候,通常意味着某些程序的 IO 操作效率很低,或者 IO 对应设备的性能很低以至于读写操作需要很长的时间来完成;
- 当 irq/softirq 占用率过高的时候,很可能某些外设出现问题,导致产生大量的irq请求,这时候通过检查 /proc/interrupts 文件来深究问题所在;
- 当 steal 占用率过高的时候,黑心厂商虚拟机超售了吧!
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。
更改显示内容
通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。
运行top命令后,
- 键入大写P,可以按CPU使用率排序
- 键入大写M,可以按内存使用率排序
- 键入大写T,根据时间/累计时间进行排序
- 键入小写e,可以修改内存显示单位m,g,t,p
- 键入大写E,可以修改第四行和第五航内存显示单位m,g,t,p
- 键入大写W,将当前设置写入~/.toprc文件中。推荐用这种方法保存top配置。
内存参数详解
精简版:
VIRT 进程所使用的虚拟内存总数,包括代码,栈、堆、共享库、共享内存,该进程的总共所需的内存空间。
RES 是进程当前驻留在物理内存中的空间。(未被内存页置换算法换出物理内存的空间)
SWAP 是进程当前存放在交换区(磁盘上)占用的空间。(因页面置换算法被换出物理内存的空间)
SHR 是进程正在使用的共享内存空间。(一般整体都在物理内存中。)
DATA 是进程需要使用的数据(栈、堆)的总空间。
CODE 是进程的代码占用的空间。
VIRT = DATA + CODE + SHR + ?共享库?
详解:
- VIRT Virtual Image (KB) 虚拟内存
Thetotal amount of virtual memory used by the task. It includes all code, data andshared libraries plus pages that have been swapped out. (一个任务所使用的虚拟内存的总数。它包括所有的代码,数据和共享库,加上已换出的页面)- RES Resident size (KB) 内存驻留空间
The non-swappedphysical memory a task has used. (一个任务正在使用的没有交换的物理内存)我们一般称为驻留内存空间。)- SHR Shared Memory size (KB) 共享内存
The amount ofshared memory used by a task. It simply reflects memory that could bepotentially shared with other processes. (一个任务使用共享内存的总数。它只是反映可能与其它进程共享的内存)也就是这个进程使用共享内存的大小。
-SWAP Swapped size (KB) 交换区空间
Theswapped out portion of a task’s total virtual memory image. (换出一个任务的总虚拟镜像的一部分)- DATA Data+Stack size (KB)
Theamount of physical memory devoted to other than executable code, also known asthe ‘data resident set’ size or DRS. (除可执行代码以外的物理内存总量,也被称为数据驻留集或DRS)
参考:
linux top命令详解
linux top VIRT RES SHR SWAP DATA内存参数详解
Linux 虚拟内存和物理内存的理解
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 using1174@foxmail.com
文章标题: Linux备忘录:top命令
文章字数: 2,918
本文作者: Jun
发布时间: 2018-04-14, 23:12:00
最后更新: 2022-11-24, 09:17:16
原始链接: http://yoursite.com/2018/04/14/Linux备忘录:top命令/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。