Linux的进程及cpu、内存等状况的监测是一件非常重要的事情。这里介绍几个比较常用的工具。
概述:ps命令、dstat命令、top命令、htop命令
一、ps命令 - 进程状态查看工具
工作机制:通过抽取内核提供的/proc/PID(每个进程的PID,有多个)目录下的各进程状态来显示给用户以供查看。
使用格式:ps [options]
选项有三种风格:
1、UNIX风格,选项可以组合在一起且前面跟一个短横线。
2、BSD风格,选项可以组合在一起且前面可以不跟一个短横线。
3、GNU风格,是长选项,前面必须跟两个短横线。
BSD选项:
a:显示与终端有关的进程,即用户通过终端启动的进程
x:显示与终端无关的进程,即系统启动过程中自动启动等情况的进程
u:以用户为中心组织进程显示方式
o field1,field2, …:自定义要显示的字段列表
常用的field:
pid(进程号)、ni(nice值)、psr(进程所属处理器)、pri(priority,优先级)、pcpu(cpu占比)、
stat(状态)、rtprio(实时优先级)、comm(发起进程的程序)、tty(终端)、ppid(父进程号)
常用组合:aux
# ps aux # 此处仅截取部分 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 19364 1536 ? Ss 13:58 0:02 /sbin/init root 2 0.0 0.0 0 0 ? S 13:58 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 13:58 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S 13:58 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S 13:58 0:00 [stopper/0] root 6 0.0 0.0 0 0 ? S 13:58 0:00 [watchdog/0] root 7 0.0 0.0 0 0 ? S 13:58 0:00 [migration/1] root 8 0.0 0.0 0 0 ? S 13:58 0:00 [stopper/1] root 9 0.0 0.0 0 0 ? S 13:58 0:00 [ksoftirqd/1] root 2438 0.0 0.2 12584 2844 ? S< 13:59 0:00 /sbin/udevd -d root 2439 0.0 0.2 12584 2836 ? S< 13:59 0:00 /sbin/udevd -d root 3822 0.0 0.1 108332 1856 tty1 Ss+ 15:22 0:00 -bash root 4197 0.0 0.4 99968 4036 ? Ss 15:29 0:02 sshd: root@pts/1 root 4201 0.0 0.1 108440 1876 pts/1 Ss 15:29 0:00 -bash root 8096 0.0 0.0 100904 572 ? S 21:22 0:00 sleep 60 root 8097 0.0 0.1 110232 1128 pts/1 R+ 21:22 0:00 ps aux
这里解释一下显示的条目
USER:这个进程的属主
PID:进程的PID号
%CPU:占据cpu时间的百分比
%MEM:占据内存的百分比
VSZ:占用的虚拟内存大小
RSS:占用的常驻内存内存大小
TTY:在哪个终端启动,?表示与终端无关
START:进程开始的时间
TIME:累积消耗的cpu时间
COMMAND:发起进程的程序,[]内的程序为内核启动
STAT:进程状态
R:运行态
S:可中断睡眠态
D:不可中断睡眠态
T:停止态
Z:僵死态
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:会话头(进程组的集合称为一个会话,而登录shell即为会话头)
UNIX选项:
-e:显示所有进程
-f:显示完整格式的进程信息
-F:显示更完整格式的进程信息
-H:以层级结构显示进程的相关信息
# ps -efH # 此处仅截取部分 UID PID PPID C STIME TTY TIME CMD root 2143 1 0 13:59 ? 00:00:00 /usr/sbin/sshd root 4197 2143 0 15:29 ? 00:00:02 sshd: root@pts/1 root 4201 4197 0 15:29 pts/1 00:00:00 -bash root 8108 4201 0 21:23 pts/1 00:00:00 ps -efH
常用组合:
1、-ef(同ps aux 显示效果相同)
2、-eF
比-ef多显示两项:
C:cpu的占用百分比
PSR:运行在哪颗CPU之上
3、-eo,axo (o必须写在最后面)
# ps -eo pid,psr,comm PID PSR COMMAND 1 0 init 2 3 kthreadd 3 0 migration/0 4 0 ksoftirqd/0 5 0 stopper/0 6 0 watchdog/0 7 1 migration/1 8 1 stopper/1 9 1 ksoftirqd/1 10 1 watchdog/1 11 2 migration/2 12 2 stopper/2 13 2 ksoftirqd/2 14 2 watchdog/2 15 3 migration/3 16 3 stopper/3 17 3 ksoftirqd/3
二、dstat命令 -- 查看系统资源信息的一个精巧的工具
使用格式:dstat [-afv] [options..] [delay [count]]
-a:默认显示格式
# dstat -a 1 2 ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 0 0 100 0 0 0|6087B 1121B| 0 0 | 0 0 | 22 18 0 0 100 0 0 0| 0 0 | 120B 826B| 0 0 | 30 23 0 0 100 0 0 0| 0 0 | 120B 346B| 0 0 | 62 37
-f:将各cpu状态都显示出来以及其他信息
-v:显示进程相关状态及其他信息
delay:延迟多少秒显示一次
count:总共显示多少次
常用选项:
-c,--cpu:显示cpu相关信息
-C cpunumber,#,….,total
-d,--disk:显示磁盘相关信息
-D sda1,sdb1,......,total
-g:显示page相关的速率数据
-m:内存的相关统计数据
-n:网卡接口的相关统计数据
-p:显示进程的相关统计数椐
-r:显示io请求的相关数据
-s:显示交换分区的相关统计数据
--tcp:显示tcp连接状态
--udp:显示udp连接状态
--raw:显示裸套接字状态
--socket:显示套接字状态
--ipc:显示进程间通信状态(消息队列msg,信号sem,共享内存shm)
--top-cpu:显示最占用CPU的进程;
--top-io:最占用io的进程
--top-mem:最占用内存的进程
--top-lantency:延迟最大的进程
# dstat -C 1 1 2 -------cpu1-usage------ -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 0 0 100 0 0 0|6079B 1121B| 0 0 | 0 0 | 22 18 0 0 100 0 0 0| 0 0 | 60B 826B| 0 0 | 21 15 # dstat -n 1 2 -net/total- recv send 0 0 60B 202B 60B 154B # dstat --ipc 1 2 --sysv-ipc- msg sem shm 0 2 0 0 2 0 0 2 0 # dstat --top-cpu 1 2 -most-expensive- cpu process vmmemctl 0.0 vmmemctl 3.0
三、top命令 -- 实时查看系统进程状态的交互式工具
使用格式:top -hv|-bcHiOSs -d secs -n max -u|U user -p pid -o fld -w [cols]
1)打开:
键入top即可打开
-d secs:指定刷新间隔,单位是秒;默认3秒
-b:以批次方式显示(换屏显示)
-n max:指定以-b方式显示多少次结束;
2)显示字段解释和交互操作方式
1、头部显示字段
第一行显示时间、系统运行时长、用户数量、负载情况;使用 l 可以显示或者取消显示;
其中负载情况的三个数字分别是1分钟,5分钟,10分钟的平均负载状况
第二行显示各状态进程数量统计;和第三行一起使用 t 可以显示或者取消显示;
第三行显示cpu使用状况,us(用户空间进程所占百分比)、sy(内核空间所占百分比)、ni(nice值调整所占百分比)、id(cpu空闲百分比)、wa(等待IO的进程所占百分比)、hi(硬件中断所占百分比)、si(软件中断所占百分比)、st(被虚拟程序偷走的cpu时间所占百分比);使用数字 1 可以显示各cpu使用状况。
第四行和第五行显示内存和交换分区被使用状况;使用 m 可以显示或者取消显示;
2、显示字段
PID:进程号;
USER:发起进程的用户
PR:进程优先级
NI:nice值
VIRT:进程所占虚拟内存大小
RES:进程所占常驻内存大小
SHR:进程所占共享内存大小
S:进程当前状态
%CPU:进程所占cpu的百分比
%MEM:进程所占内存的百分比
I TIME+:累积所占cpu的时长
COMMAND:发起此进程的程序
3、交互操作方式
退出命令:q
修改刷新时间间隔:s
终止指定进程:k;敲k之后输入进程号即可
获取帮助:h或者?
改变显示色彩:z
排序:
P:以占据CPU百分比排序
M:以占据内存百分比排序
T:以累计占用CPU时间排序
四、htop命令 --- top命令的替代工具,亦是一款实时查看进程状况的工具
1)仅用htop就可打开
使用格式: htop [-dChusv]
选项:
-d secs:打开前指定刷新间隔,单位是十分之一秒;默认为2秒
-C:无颜色显示
-h:显示帮助信息
-u USER:显示指定用户发起的进程
-s COLUMN:以指定列为参考进行排序
2)字段解释及交互
1、字段解释:
大部分同top命令显示格式,请参阅上面top字段解释;不同之处在于左上角的1~4分别显示了不同的cpu的占用百分比。Task仅显示用户空间进程的数量,其中有一项thr是线程数;
这里值得注意的是不同颜色去区分cpu、内存等的使用具体状况。字段和top显示一样。
2、交互
(1)可以使用鼠标操作。
(2)常用的交互命令
1)l:显示选定的进程打开的文件列表
2)s:跟踪选定的进程
3)t:以层级关系显示各进程状态;
注意:可使用鼠标或者上下键来选定用户
4)H:是否显示用户线程数;默认显示
5)K:是否显示内核线程数;默认隐藏
6) F:指定光标
7)P M T:根据cpu使用百分比、内存使用百分比、cpu占用累计时间来排序
8)F6 >:根据选定字段列为依据进行排序
9)q:退出htop
10)h:打开帮助
小结:htop是一款十分精巧的工具,这里只是简单介绍了它的基本使用;更多的用法有兴趣者可以继续通过帮助文档学习。
注:本文所用示例均来自CentOS系统。