设为首页 收藏本站
查看: 1199|回复: 0

[经验分享] linux进程管理之ps、top、htop、dstat命令详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-30 13:35:26 | 显示全部楼层 |阅读模式
在讲命令之前先简要讲解一下进程的概念性问题。

进程的创建:
除了init外,每个进程都是由父进程创建,init是女娲创建
父进程可以通过fork()请求创建子进程,子进程需要读取的数据可以与父进程共用
如果子进程要写入自己的数据,父进程就把数据复制给子进程一份,这样子进程就有了自己的数据。
子进程任务完成后就被毁尸灭迹了,就像从没存在过一样

进程的切换:
在一个进程运行一段时间后,由于cpu需要运行其他进程,这个进程就必须把位置腾出来让给其他进程。这个进程运行的当前状态,会被放在寄存器中,下次轮到这个进程运行时就从寄存器中读取这个状态,然后从这个状态继续运行。就这样叫做保存现场。但如果在现场来回切换,就会浪费CPU时间降低系统性能。进程的相关信息存储在进程结构体:task struct,多个任务的task struct组件的链表为tasklist。

进程优先级
0-139:实时优先级,优先级与静态相反
100-139:静态优先级,数字越小,优先级越高,必要时可让出优先级
nice值:-20到19,分别对应100-139可改变优先级

进程内存:
把内存分隔成许多个小片段叫做page,每个进程按进程大小分一些page。内核把这些片段page伪装成一个完整内存,所以进程不知道还有其他进程存在,以为自己占据了所有内存。

进程的查看:
内核通过一个接口/proc,查看内核中的状态信息,即内核参数,这是一个伪文件系统。每个进程在/proc目录下都一个以进程号命令的目录。每个目录下都记录着该进程的详细信息。
内核参数有两类:
可设置其值从而调整内核运行特性的参数;可设置的都在/proc/sys/
状态变量:其用于输出内核中统计信息或状态信息,仅用于查看;

进程按启动方式分类:

系统启动过程中自动启动:与终端无关的进程;
用户通过终端启动:与终端相关的进程;如果中断关掉,这些进程也会结束。


ps命令:- report a snapshot of the current processes.
ps可以查看所有进程的状态,但只是查看那一刻的状态,不能够刷新。


ps命令的选项有三种风格:
1   UNIX options, which may be grouped and mustbe preceded by a dash.必须带一个“-”
2   BSD options, which may be grouped and mustnot be used with a dash.坚决不能带“-”
3   GNU long options, which are preceded by two dashes.要带“--”

options选项:

a:查看所有与终端相关的进程;
1
2
3
4
5
6
[iyunv@yph7proc]# ps a
   PID TTY     STAT   TIME COMMAND
  1116 tty1    Ss+    0:00 /sbin/agetty --nocleartty1
  2419 pts/0   Ss+    0:02 -bash
  2908 pts/1   Ss     0:01 -bash
  4486 pts/1   R+     0:00 ps a




PID:进程号
TTY:登陆的终端类型
STAT:进程状态
TIME:累计占用cpu的时间
COMMAND:由那个命令启动的此进程,带中括号的是内核线程

x:查看所有与终端无关的进程;

1
2
3
4
5
   [iyunv@yph7 proc]#ps x
    PID   TTY       STAT     TIME     COMMAND
     2     ?         S       0:00   [kthreadd]
     3     ?         S       0:09   [ksoftirqd/0]
     5     ?         S<      0:00   [kworker/0:0H]




u:查看以用户为中心查看进程状态信息显示;pid号进行排序
[iyunv@yph7proc]# ps u
常用组合之一:ps aux
1
2
3
4
5
6
[iyunv@yph7 proc]# ps aux
USER        PID %CPU %MEM VSZ RSS TTY    STAT START     TIME  COMMAND
root         2  0.0  0.0  0   0  ?       S    12月25   0:00 [kthreadd]
root         3  0.0  0.0  0   0  ?       S    12月25   0:09 [ksoftirqd/0]
root         5  0.0  0.0  0   0  ?       S<   12月25   0:00 [kworker/0:0H]
root         7  0.0  0.0  0   0  ?       S    12月25   0:02 [migration/0]




USER:进程的属主
PID:进程的id号
%CPU:累计对cpu的占用百分比
%MEM:占用整个内存空间的比率
VSZ:虚拟内存集,占用虚拟内存的大小。虚拟内存是内核把进程实际占用的内存page伪装成的一个完整内存,把这个虚拟完整内存提供给进程的,让进程自以为自己霸占了整个内存。进程占用的虚拟内存可能包括一些公共内存page,但进程并不知道是公共的。这些公共内存page不算进程占用的实际内存。
RSS: ResidentSize,常驻内存集。一定不能放到交换内存swap中去的进程。
TTY:进程属主登陆的终端类型
STAT: 进程处于的状态
R:running,正常运行的状态
S:interruptable sleeping,可中断的睡眠状态
D:uninterruptable sleeping不可中断的运行状态
T:Stopped,停止运行的状态
Z:zombie,已经僵死的状态,等待被清除
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader,会话领导者。比如shell下运行好多进程,这个shell就是领导者,若这个shell被关闭,其下的所有进程全部会关闭。
START:进程启动的时间
TIME:进程累计占用cpu的时间
COMMAND:由那个命令启动的此进程,带中括号的是内核线程

-e:显示所有进程
-f:显示完整格式的进程信息

常用组合之二:ps -ef
1
2
3
4
5
[iyunv@yph7 proc]#ps -ef
UID         PID  PPID    C  STIME  TTY        TIME  CMD
root          2     0    0  12月25  ?      00:00:00 [kthreadd]
root          3     2    0  12月25  ?      00:00:09 [ksoftirqd/0]
root          5     2    0  12月25  ?      00:00:00 [kworker/0:0H]




PPID:指父进程的进程号
C:进程占用cpu百分比,0表示太小,近似为0
STIME:启动进程的时间

-F:显示更完整格式的进程信息;与“-f”相似
-H:以层级结构显示进程的相关信息;
常用组合之三:-eFH
1
2
3
4
5
[iyunv@yph7 proc]#ps -eFH
UID         PID  PPID  C    SZ  RSS PSR  STIME   TTY       TIME    CMD
root          2    0   0     0    0   1   12月25  ?      00:00:00  [kthreadd]
root          3    2   0     0    0   0   12月25  ?      00:00:09  [ksoftirqd/0]
root          5    2   0     0    0   0   12月25  ?      00:00:00  [kworker/0:0H]




C:进程占用cpu百分比,0表示太小,近似为0
PSR:进程运行在哪个cpu上

常用组合之四:-eo和 axo
o  field1, field2,...:自定义要显示的字段列表,以逗号分隔;
常用的field:pid, ni, priority, psr, pcpu, stat, comm, tty, ppid, rtprio
pcpu:cpu的利用率
ni:nice值;
priority:, 优先级;
rtprio:real time priority,实时优先级;
1
2
3
4
5
6
7
8
9
10
[iyunv@yph7 proc]#ps -eo pid,ni,priority
   PID NI PRI   --------------查看进所有程id,nice值和优先级。
     1  0  20
     2  0  20
     3  0  20
[iyunv@yph7 proc]#ps axo psr,pcpu,stat
PSR %CPU STAT-------查看所有进程进程运行在哪个cpu,占cpu百分比,运行状态
  0  0.0  Ss
  1  0.0  S
  0  0.0  S




1
2
3
4
5
6
[iyunv@yph7 proc]#ps ao comm,tty,ppid,rtprio
COMMAND         TT        PPID   RTPRIO
bash            pts/0      2415     -
bash            pts/1      2904     -
ps              pts/1      2908     -
查看所有与终端相关的进程,以及这些进程的由哪些进程发起,关联的终端类型,进程的父进程号,以及实时优先级。








top命令:- display Linux processes
top命令时显示进程信息的非常重要的工具

下面详细解释top命令显示出的信息代表的意思
1
2
[iyunv@yph7 ~]#top
top- 18:41:19up 28 min,  2 user, load average: 0.00,0.04, 0.07




18:41:19:指当前系统的时间;
up28min:系统已经启动了28分钟;
2 user:当前系统有两个用户登录
load average:0.00, 0.04, 0.07:分别在过去1分钟,5分钟,15分钟的在cpu上等待运行的进程的平均队列长度,长度越长,说明cpu的压力越大,cpu太慢,应付不了当前业务需求.队列长度一般不能大于cpu的数量.
uptime命令:也能显示上述信息.

1
Tasks: 370total,   1 running, 369 sleeping,   0 stopped,  0 zombie




当前系统上任务总数,即一共运行370个进程; 1个进程正在运行,369个处于睡眠状态;0个进程处于停止(stop)状态, 0个进程处于僵死(zombie)状态.

1
%Cpu(s):  0.1 us, 0.1 sy,  0.0 ni, 99.8 id,  0.1 wa, 0.0 hi,  0.0 si,  0.0 st




进程占用百分比
us:user space,用户空间.用户空间里的所有进程占用cpu百分比
sy:system,系统空间,内核占用cpu百分比
ni:nice值,nice值调整后给nice值调整占用的cpu的比率
id:cpu空闲百分比
wa:wait,cpu等待IO设备的时间.如果这个时间很长说明IO设备会成为系统性能的瓶颈
hi:hardwareinterrupt处理硬件终端所消耗的cpu的百分比
si:softwareinterrupt,处理软中断所消耗的cpu百分比
st:被虚拟化程序偷走的cpu时间的百分比
KiBMem:  1003184 total,   761088 free,    99096 used,   143000 buff/cache
以KB为单位显示物理内存的使用情况。
total:总内存大小;  free:空闲、可用内存大小;   used:已用内存大小;   buff/cache:用于缓冲和缓存的内存空间大小,这段可以回收的,不算真正被占用
KiBSwap:  2097148 total,  2097148 free,        0 used.   753948 avail Mem
avail Mem:可用空间。
1
2
3
4
PID USER   PR NI   VIRT   RES  SHR    S  %CPU %MEM   TIME+   COMMAND                                       
2242 root  20  0  130156  2028  1268  R  0.7  0.2    0:00.84  top                                          
137  root  20  0       0    0    0    S  0.3  0.0    0:01.69  rcu_sched                                    
1    root  20  0  59632   7672  2632  S  0.0  0.8    0:03.13  systemd




PR:优先级
NI:nice值
VIRT:虚拟内存集
RES:常驻内存集
SHR:共享内存空间
S:当前状态   


排序:默认以占用cpu百分比由大到小排序
敲下列大写字母键,分别以对应的方式排序
P:以占据CPU百分比排序;
M:以占据内存百分比排序;
T:以累积占用CPU时间排序;

首部信息查看:
l:第一行属于uptime信息:敲l键可以显示和隐藏此信息。也可在命令行直接输入uptime命令查看。
t:第二行和第三行的tasks及cpu信息:可以敲t键查看和隐藏
1:按下数字1键可以查看和隐藏每个cpu的使用情况
m:第四行和第五行的内存信息:敲m键查看和隐藏

其它命令:
q:退出命令:按q键退出top查看页面
s:修改刷新时间间隔。按下s键,然后按下数字,即可修改刷新时间间隔为你输入的数字,单位为秒。例如:按下s键,在按数字1键,即可实现每秒刷新一次
k:终止指定的进程。按下k键---à再输入要杀死的进程的pid--à按enter键--à(选择信号类型,以数字标示,默认15为杀死)本步可省略à按enter键

top的选项:
-d #:指定刷新时间间隔,默认为3秒;
[iyunv@yph7~]# top -d 2 ------打开后就是2秒钟刷新一次的
-b:以批次方式显示;按一屏一屏的刷新显示,可以Ctrl+c退出
[iyunv@yph7~]# top –b
-n #:显示多少批次;
[iyunv@yph7~]# top -n 4 --------------刷新4次就自动退出了
[iyunv@yph7~]# top -b -n 3 ----------按批次刷新3次就自动退出






htop命令:比top更强大、更漂亮的工具,在xshell中支持鼠标点击操作。安装时要用epel源
[iyunv@yph7 ~]#htop



QQ截图20151230133417.png

左上方的1,2,3,4分别代表的是哪一颗cpu的使用情况。Mem,Swp分别是物理内存和交换内存的使用情况。
右上方Tasks表示用户空间进程有35个。thr指线程数量13个。有一个正在运行的进程。
uptime:指系统已经启动了多久
查看帮助:用鼠标点击左下角”help“或按F1键,可以查看帮助。如下图
QQ截图20151230133424.png
Memorybar一行中,绿色的”used“表明绿色的进度条表示是已用内存。蓝色的”buffer“表明蓝色的进度条是缓冲部分。橙色的”cache“表明橙色进度条代表缓存部分。
CPU一行中,low-priority指低优先级占用时间;normal正常; kernel内核占用的时间;virtual虚拟化占用的cpu时间
Status一行中,R,运行状态;S,睡眠状态;T,停止状态;Z,僵死状态;D,不可中断睡眠状态。
u,表示按用户查看进程。敲一下u键,在屏幕左侧,可以用上下箭头移动光标实现用户的选择,按enter确定。
H:隐藏或显示右上角thr线程数量。通过敲”H“键实现
K:在右上角显示或隐藏内核线程。通过敲K键实现。默认为隐藏
P,M,T:敲大写的P,M,T分别以cpu占用比率,物理内存占用,累计占用cpu时间进行排序。
F6:敲F6键可以选择按自己需要的字段colume进行排序。用上下箭头进行选择
a:把一个进程限定在某个或某几个cpu上运行,不允许其在其他cpu上运行。上下箭头移动光标,空格键进行选择,enter键确定。
l:查看指定进程所打开的所有文件。使用上下箭头选择进程,然后敲l键进行查看。敲ESC退出
s:跟踪一个检查发起的系统调用。选中进程后敲s键。ESC退出。
t,F5:以树状图的形式显示各进程的状态
F2:设置一些显示属性。按”F2“键,在”setup“列选择Meters,在”left colume“列选择cpu,按enter可进行cpu显示的界面切换,可以切换才LED形式或者百分比形式。选择”right colume“列的Tasks counter,按enter可对右上角的显示界面进行切换,同样也有LED形式和其他形式。选中“Availablemeters“列的一些选项,然后按F5,把这项添加的左上角列表显示,按F6可添加到右上角列表中进行显示。还有其他的选项,可以自行摸索。

选项:
-d #:指定延迟时间间隔;不过指定的是#/10 秒,即0.#秒。看下面例子
1
[iyunv@yph7 ~]#htop -d 2



1
2
3
[iyunv@yph7 ~]#htop -d 5   ----------0.5秒刷新一次
[iyunv@yph7 ~]#htop -d 20 -------2秒刷新一次
[iyunv@yph7 ~]#htop -d 30 ----------3秒刷新一次




-u UserName:仅显示指定用户的进程;
[iyunv@yph7~]# htop -u flimmer
-s COLUME:以指定字段进行排序;
[iyunv@yph7~]# htop -s PID


dstat命令:- versatile tool for generating system resource statistics系统资源使用统计的工具
dstat [-afv][options..] [delay [count]]

常用选项:dstat 2 5  每两秒刷新一次,5次后退出

-c, --cpu:显示cpu使用情况;
1
2
3
4
5
[iyunv@yph7 ~]# dstat -c
----total-cpu-usage----
usr sys   idl  wai  hiq siq
  0   0   99    0    0   0
  0   0   99    0    0   0




-C #,#,...,total:显示第几号cpu的信息,可以指定多个,用逗号隔开。total表示全部cpu。
QQ截图20151230133435.png
-d, --disk:显示磁盘的相关信息
QQ截图20151230133441.png
-D sda,sdb,...,或者total,显示指定磁盘设备,多个以逗号隔开
QQ截图20151230133448.png
-g:显示page相关的速率数据;
1
2
3
4
5
[iyunv@yph7 ~]#dstat -g
---paging--
  in   out
   0    0
   0    0




-m:Memory的相关统计数据
1
2
3
4
5
[iyunv@yph7 ~]#dstat -m
------memory-usage-----
used buff  cach  free
165M 1084k 89.0M  724M
165M 1084k 89.0M  724M




-n:Interface的相关统计数据;
1
2
3
4
5
6
[iyunv@yph7 ~]#dstat -n
-net/total-
recv send
   0    0
7892B  202B
2160B  154B




-p:显示process的相关统计数据;
1
2
3
4
5
[iyunv@yph7 ~]#dstat -p
---procs---
run blk new
  0  0 0.2
  0  0   0




-r:显示io请求的相关的统计数据;
1
2
3
4
5
6
[iyunv@yph7 ~]#dstat -r
--io/total-
read writ
0.55  0.19
   0    0
   0    0




-s:显示swapped的相关统计数据;
1
2
3
4
5
[iyunv@yph7 ~]#dstat -s
----swap---
used  free
   0  2048M
   0  2048M




--tcp显示tcp各链接状态的数量
1
2
3
4
5
[iyunv@yph7 ~]#dstat --tcp
----tcp-sockets----
lis act syn timclo
  4  2   0   0   0
  4  2   0   0   0




--udp 显示udp状态的信息
1
2
3
4
5
[iyunv@yph7 ~]#dstat --udp
--udp--
lis  act
  5   0
  5   0




--raw裸套接字相关信息
1
2
3
4
5
[iyunv@yph7 ~]#dstat --raw
raw
raw
  0
  0




--socket:显示socket状态的信息
1
2
3
4
5
[iyunv@yph7 ~]#dstat --socket
------sockets------
tot tcp udp raw frg
448   4  3   0   0
448   4  3   0   0




--ipc显示各进程间通信的相关数据
1
2
3
4
5
[iyunv@yph7 ~]#dstat --ipc
--sysv-ipc-
msg sem shm
  0  0   0
  0  0   0




--top-cpu:显示最占用CPU的进程;
1
2
3
4
5
6
[iyunv@yph7 ~]#dstat --top-cpu
-most-expensive-
  cpu    process  
rcu_sched    0.1
xz            25
xz            25




--top-io:最占用io的进程;
1
2
3
4
5
6
[iyunv@yph7 ~]#dstat --top-io
----most-expensive----
     i/o process      
bash         27k 1710B
sshd: root@ 146B  196B
sshd: root@  78B  168B




--top-mem:查看最占用内存的进程;
1
2
3
4
5
6
[iyunv@yph7 ~]#dstat --top-mem
--most-expensive-
  memory process
polkitd     10.0M
polkitd     10.0M
polkitd     10.0M




--top-latency:查看延迟最大的进程;
1
2
3
4
5
6
7
[iyunv@yph6 ~]# dstat --top-latency
--highest-total--
latency process
kblockd/0     201
events/0       42
vmmemctl       95
events/0       82





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-158393-1-1.html 上篇帖子: Linux 下GNOME KDE的sftp gui 客户端 下篇帖子: Redhat 7修改httpd的默认端口 linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表