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输出的第一行明显大于下面的几行
据说第一行是自上次启动以来的平均数据,所以可以不作数,但是问题是,已知开机以后服务都自动跑起来了,我啥都没动,平均数据为啥和当前数据差这么多啊??