ps top等命令详解

1,ps命令

ps命令是一个很强大的命令了,显示查询瞬间进程的状态,参数众多,仅列几个常用的和具体参数的含义。

1)基本使用

ps -aux
#显示详细的进程信息,进程所有者不限于当前用户

查询到的进程有关参数的含义:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 进程所有者
PID: 进程ID
%CPU: 占用的 CPU 使用率
%MEM: 占用的内存使用率
VSZ: 占用的虚拟内存大小
RSS: 占用的内存大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 进程状态:
 D 无法中断的休眠状态(通常 IO 的进程); 
 R 正在运行,在可中断队列中; 
 S 处于休眠状态,静止状态; 
 T 停止或被追踪,暂停执行; 
 W 进入内存交换(从内核2.6开始无效); 
 X 死掉的进程; 
 Z 僵尸进程不存在但暂时无法消除;
 W: 没有足够的记忆体分页可分配
 WCHAN 正在等待的进程资源;
 <: 高优先级进程
 N: 低优先序进程
 L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O),即,有些页被锁进内存
 s 进程的领导者(在它之下有子进程); 
 l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads); 
 + 位于后台的进程组;
START: 启动进程的时间; 
TIME: 进程消耗CPU的时间;
COMMAND:命令的名称和参数;

2)排序使用

ps -aux --sort=-vsz
#ps命令自带排序功能,本命令指的是按照vsz的大小降序排列

可排序的项目有:

c cmd   可执行地简单名称 
C cmdline   完整命令行 
f flags   长模式标志 
g pgrp   进程地组ID 
G tpgid   控制tty进程组ID 
j cutime   累计用户时间 
J cstime   累计系统时间 
k utime   用户时间 
K stime   系统时间 
m min_flt   次要页错误地数量 
M maj_flt   重点页错误地数量 
n cmin_flt 累计次要页错误 
N cmaj_flt 累计重点页错误 
o session   对话ID 
p pid   进程ID 
P ppid   父进程ID 
r rss   驻留大小 
R resident 驻留页 
s size   内存大小(千字节) 
S share   共享页地数量 
t tty   tty次要设备号 
T start_time 进程启动地时间 
U uid   UID
u user   用户名
v vsize   总地虚拟内存数量(字节) 
y priority 内核调度优先级

3)用标准格式显示进程的详细信息(aux命令用的不是标准格式,是BSD格式)

ps -ef

显示参数含义:

UID    PID  PPID  C STIME TTY      TIME CMD
UID    //用户ID、但输出的是用户名 
PID    //进程的ID 
PPID    //父进程ID 
C      //进程占用CPU的百分比 
STIME  //进程启动到现在的时间 
TTY    //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 
CMD    //命令的名称和参数

4)查看父进程的子进程

pstree -p 1234
#1234指的是pid,能拿到子线程的线程数
top -H -p 1234
#-H按照线程查看 -p指定父进程的pid
cat /proc/1234/status
#查看某个进程的具体信息,数据比较繁杂

5)根据ps打印出来的系统内容排序查看

查看cpu占用率前5的几个进程

ps -aux | sort -k3,3nr | head -5

#sort中-t是指定的分隔符,默认空格,-k是指定分隔符后的字段顺序,-n按照字符串的数值顺序比较,-r reverse , -u uniq

查看内存前5的几个进程

ps -aux | sort -k4,4nr | head -5

 

2,top命令

  top 命令是 Linux 下常用的系统资源占用查看及性能分析工具,能够实时显示系统中各个进程的资源(比如cpu、内存的使用)占用状况,top命令的执行结果是一个动态显示过程。

用户可以输入的参数如下:

d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式。
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名。
-n :与 -b 搭配,意义是,需要进行几次 top 的输出结果。
-p :指定某些个 PID 来进行观察监测而已。

得到的参数含义:

列名    含义
PID    进程id
PPID    父进程id
RUSER    Realusername
UID    进程所有者的用户id
USER    进程所有者的用户名
GROUP    进程所有者的组名
TTY    启动进程的终端名。不是从终端启动的进程则显示为?
PR       优先级
NInice     值。负值表示高优先级,正值表示低优先级
P        最后使用的CPU,仅在多CPU环境下有意义
%CPU    上次更新到现在的CPU时间占用百分比
TIME    进程使用的CPU时间总计,单位秒
TIME+    进程使用的CPU时间总计,单位1/100秒
%MEM    进程使用的物理内存百分比
VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP    进程使用的虚拟内存中,被换出的大小,单位kb。
RES    进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE    可执行代码占用的物理内存大小,单位kb
DATA    可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR    共享内存大小,单位kb
nFLT    页面错误次数
nDRT    最后一次写入到现在,被修改过的页面数。
S    进程状态。
D=    不可中断的睡眠状态
R=    运行
S=    睡眠
T=    跟踪/停止
Z=    僵尸进程
COMMAND    命令名/命令行
WCHAN    若该进程在睡眠,则显示睡眠中的系统函数名

top命令选项

top -b 以批处理模式显示程序信息

top -n 2 设置更新两次以后就退出,不需要继续更新了

top -d 3 设置三秒更新一次

5.top交互命令

 

在top 命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了s 选项, 其中一些命令可能会被屏蔽。

h 显示帮助画面,给出一些简短的命令总结说明

k 终止一个进程。

i 忽略闲置和僵死进程。这是一个开关式命令。

q 退出程序

r 重新安排一个进程的优先级别

S 切换到累计模式

s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s

f或者F 从当前显示中添加或者删除项目

o或者O 改变显示项目的顺序

l 切换显示平均负载和启动时间信息

m 切换显示内存信息

t 切换显示进程和CPU状态信息

c 切换显示命令名称和完整命令行

M 根据驻留内存大小进行排序

P 根据CPU使用百分比大小进行排序

T 根据时间/累计时间进行排序

W 将当前设置写入~/.toprc文件中

 3,vmstat命令

 

vmstat命令查看CPU负载使用情况。其相关参数含义如下:

us:用户进程使用CPU的时间(%);

sy:系统进程使用CPU的时间(%);

id:CPU空闲时间(%);

wa:等待IO所消耗的CPU时间(%);

st:从虚拟设备所使用的CPU的时间(%);

 

实践

经过实践,本人发现,有个进程15252,在ps中显示的系统cpu负载为20%,但是在vmstat中,显示cpu空闲大约93%,那么问题来了,同样是cpu,咋还加起来大于1了呢,我也是多方查找才终于知道了问题的答案,是这样的,ps中cpu负载的计算方法是需要除以核心数量的,我机器4核的,也就是平均到某个核心上,大约为5%,这下基本就对上了。嗯嗯,感谢原作者:链接,接下来是摘抄了哈:

 

摘抄的:

问题1:首先,ps aux中两个compress进程占用cpu 15.5%+28.9%>40%,再加上其它进程,为何vmstat查看cpu空闲率id还能一直大于73%

ps的cpu占用率需要除以双核cpu数目为2,因此实际占用为(15.5%+28.9% )/2=22.2% ,也就约等于100%-73%;

 

问题2:其次,top命令显示的进程compress的cpu占用率和ps显示的数值差别很大,ps的cpu占用率雷打不动,一直是恒定值,top的比较动态, 难道ps aux显示的进程cpu占用率不可靠?

ps和top相差的数值为2倍关系,因此显示的占用率相差很大,同时变化率也会较大;

 

问题3:最后,这三个命令查出的cpu占用率相互之间均不统一,用哪一个更可靠?例如输入如下命令,粗体字是cpu占用率

这三个命令的占用率是统一的,按照如下公式进行计算时数据是一致的:

vmstat 的100%-idle == ps的cpu占用/cpu核心数 == top的cpu占用/cpu核心数/物理cpu数目;

 另外,还有这样的发现,vmstat输出的第一行明显大于下面的几行

 

 据说第一行是自上次启动以来的平均数据,所以可以不作数,但是问题是,已知开机以后服务都自动跑起来了,我啥都没动,平均数据为啥和当前数据差这么多啊??

posted @ 2021-03-11 13:47  0点0度  阅读(953)  评论(0编辑  收藏  举报