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多显示两项:

Ccpu的占用百分比

PSR:运行在哪颗CPU之上

        3、-eoaxo (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状态都显示出来以及其他信息

Linux进程管理命令之ps、dstat、top、htop_第1张图片

    -v:显示进程相关状态及其他信息

wKiom1Z_-07CVjzwAAAhoRXAq7Q734.png

    delay:延迟多少秒显示一次

    count:总共显示多少次   

常用选项:

-c--cpu:显示cpu相关信息

-C cpunumber#….total

-d--disk:显示磁盘相关信息

-D sda1sdb1,......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方式显示多少次结束;

    Linux进程管理命令之ps、dstat、top、htop_第2张图片

   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:以指定列为参考进行排序

       Linux进程管理命令之ps、dstat、top、htop_第3张图片 

2)字段解释及交互

  1、字段解释:

    大部分同top命令显示格式,请参阅上面top字段解释;不同之处在于左上角的1~4分别显示了不同的cpu的占用百分比。Task仅显示用户空间进程的数量,其中有一项thr是线程数

    Linux进程管理命令之ps、dstat、top、htop_第4张图片

 这里值得注意的是不同颜色去区分cpu、内存等的使用具体状况。字段和top显示一样。

  2、交互

    (1)可以使用鼠标操作。

    (2)常用的交互命令   

1)l:显示选定的进程打开的文件列表


Linux进程管理命令之ps、dstat、top、htop_第5张图片


2)s:跟踪选定的进程


Linux进程管理命令之ps、dstat、top、htop_第6张图片


3)t:以层级关系显示各进程状态;


Linux进程管理命令之ps、dstat、top、htop_第7张图片

    注意:可使用鼠标或者上下键来选定用户

     4)H:是否显示用户线程数;默认显示

     5)K:是否显示内核线程数;默认隐藏
    6) F:指定光标

     7)P M T:根据cpu使用百分比、内存使用百分比、cpu占用累计时间来排序   

    8)F6 >:根据选定字段列为依据进行排序

    9)q:退出htop

    10)h:打开帮助

  小结:htop是一款十分精巧的工具,这里只是简单介绍了它的基本使用;更多的用法有兴趣者可以继续通过帮助文档学习。


注:本文所用示例均来自CentOS系统。