ps、pstree、top命令

半腔热情 提交于 2020-01-18 06:48:36

ps -l

[root@i-ka ~]#ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 17236 17233  0  80   0 - 28946 wait   pts/0    00:00:00 bash
0 R     0 17274 17236  0  80   0 - 37233 -      pts/0    00:00:00 ps

每个项目的意义简单说明如下:

  • F (flag):代表程序的总结旗标,常见为4 代表root
  • S (stat):状态列,主要的分类项目有:
    R (Running):该程式正在运作中;
    S (Sleep):该程式目前正在睡眠状态(idle),但可以被唤醒(signal)。
    D :不可被唤醒的睡眠状态,通常这支程式可能在等待I/O 的情况(ex>列印)
    T :停止状态(stop),可能是在工作控制(背景暂停)或除错(traced) 状态;
    Z (Zombie):僵尸状态,程序已经终止但却无法被移除至记忆体外。
  • UID/PID/PPID:代表『此程序被该UID 所拥有/程序的PID 号码/此程序的父程序PID 号码』
  • C:代表CPU 使用率,单位为百分比;
  • PRI/NI:Priority/Nice 的缩写,代表此程序被CPU 所执行的优先顺序,数值越小代表该程序越快被CPU 执行。
  • ADDR/SZ/WCHAN:都与记忆体有关,ADDR 是kernel function,指出该程序在记忆体的哪个部分,如果是个running 的程序,一般就会显示『 - 』 / SZ 代表此程序用掉多少记忆体/ WCHAN 表示目前程序是否运作中,同样的, 若为- 表示正在运作中。
  • TTY:登入者的终端机位置,若为远端登入则使用动态终端介面(pts/n);
  • TIME:使用掉的CPU 时间,注意,是此程序实际花费CPU 运作的时间,而不是系统时间;
  • CMD:就是command 的缩写,造成此程序的触发程式之指令为何。

pstree

程序关联树即pstree,为了显示的方便,建议-A 的选项, 以ASCII 的显示字元输出,比较不容易出现乱码:

[root@i-ka ~]# pstree -A
systemd-+-NetworkManager-+-dhclient
        |                `-2*[{NetworkManager}]
        |-2*[agetty]
        |-auditd---{auditd}
        |-chronyd
        |-crond
        |-dbus-daemon
        |-dsp.jar---java---82*[{java}]
        |-gapd---{gapd}
        |-irqbalance
        |-nginx---2*[nginx]
        |-oms-server.jar---java---99*[{java}]
       -----省略-------      
        `-tuned---4*[{tuned}]

若需要加上PID 与使用者资料, 可以直接使用-up 来加入即可。

[root@i-ka ~]# pstree -Aup
systemd(1)-+-NetworkManager(445)-+-dhclient(706)
           |                     |-{NetworkManager}(455)
           |                     `-{NetworkManager}(457)
           |-agetty(625)
           |-agetty(644)
           |-dbus-daemon(429,dbus)
           |-dgp-server.jar(2615,bootapp)---java(2663)-+-{java}(2664)
           |                                           |-{java}(2666)
           -------底下省略-------

ps aux

[root@i-ka ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 125196  2640 ?        Ss    2019  23:56 /usr/lib/systemd/sy
root         2  0.0  0.0      0     0 ?        S     2019   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S     2019   0:38 [ksoftirqd/0]
nginx      898  0.0  0.0  55636   640 ?        S     2019   0:01 nginx: worker proce
redis     1012  0.0  0.0 142904  1068 ?        Ssl   2019  48:14 /usr/bin/redis-serv

每一个项目代表的意义简易说明如下:

  • USER:该process 属于那个使用者帐号的
  • PID :该process 的程序识别码。
  • %CPU:该process 使用掉的CPU 资源百分比;
  • %MEM:该process 所占用的实体记忆体百分比;
  • VSZ :该process 使用掉的虚拟记忆体量(Kbytes)
  • RSS :该process 占用的固定的记忆体量(Kbytes)
  • TTY :该process 是在那个终端机上面运作,若与终端机无关则显示?,另外, tty1-tty6 是本机上面的登入者程序,若为pts/0 等等的,则表示为由网路连接进主机的程序。
  • STAT:该程序目前的状态,状态显示与ps -l 的S 旗标相同(R/S/T/Z)
  • START:该process 被触发启动的时间;
  • TIME :该process 实际使用CPU 运作的时间。
  • COMMAND:该程序的实际指令

top 动态观察程序

top 可以协助读者未来在管理程序的CPU 使用量上面的一个很重要的工具。直接输入top 即可每5 秒钟更新一次程序的现况,如下所示:
在这里插入图片描述

top 程式执行的状态列,每个项目的意义为:
  • PID :每个process 的识别码(PID)
  • USER:该process 所属的使用者;
  • PR :Priority 的简写,程序的优先执行顺序,越小越早被执行;
  • NI :Nice 的简写,与Priority 有关,也是越小越早被执行;
  • %CPU:CPU 的使用率;
  • %MEM:记忆体的使用率;
  • TIME+:CPU 使用时间的累加;
  • COMMAND:指令

在预设的情况下,top 所显示的程序会以CPU 的使用率来排序,这也是管理员最需要的一个观察任务。许多时候系统发生资源不足或者是效能变差的时候, 最简易的方法为使用top 观察最忙碌的几只程序,借以处理程序的效能问题。此外,也能透过top 观察I/O wait 的CPU 使用率, 可以找到I/O 最频繁的几只程序,借以了解到哪些程序在进行哪些行为,或者是系统效能的瓶颈,借以作为未来升级硬体的依据。

top - 10:22:33 up 34 days, 18:16,  1 user,  load average: 6.41, 5.25, 4.66

代表目前为10:22:33 ,本系统开机了34 天又18:16 这的久的时间,目前有1 用户登入,工作负载为6.41, 5.25, 4.66 。那三个数据代表1, 5, 15 分钟内的平均工作负载。所谓的工作负载为『单一时间内,CPU 需要运作几个工作』之意,并非CPU 使用率。

Tasks:  92 total,   1 running,  91 sleeping,   0 stopped,   0 zombie

目前共有92个程序,其中1 个在执行,91个睡着了,没有停止与僵尸程序。

%Cpu(s): 27.6 us,  5.5 sy,  0.0 ni, 66.8 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st

这里才是CPU 的使用率百分比,比较需要注意id (idle) 与wa (I/O wait),id 越高代表系统越闲置, wa 越高代表程序卡在读写磁碟或网路上,此时系统效能会比较糟糕。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!