系统监控之进程篇

2019-06-03  本文已影响0人  HugiFish

Linux系统下可用于进程监控的常用命令主要有ps,top,htop

  1. ps 是Process Status(进程状态)的简写,从名字里就能看出这个命令就是为了监控进程而生的。
  2. top 和htop,从命令名字就可以看出它们的前世今生,top即峰值,表示的是动态打印出系统某一时段的各个指标的峰值,其中就包括系统内的进程。htop 是一个可交互式进程浏览器,就是top的升级版,并不是默认安装。
    下面我们对每个命令的常用用法做简要分析。

1. ps

ps 的格式是ps [options]
一般的Linux命令选项参数都有两种格式的区别:长格式和短格式,但是ps由于为了兼容不同语法分割,短格式也分为两种:不带‘-’和带‘-’。可偏偏这两种风格后边接的有可能是同一个字符,并且表现的行为是有时一致,有时不一致。所以说ps选项对于初学者来说是一个大坑!
按照命令长短和是否存在横线可分为以下几种:

命令格式 风格说明 示例
ps op BSD 语法格式 ps t tty1
ps -op UNIX语法格式 ps -t tty1
ps --option GNU语法格式 ps --tty tty1

注意:不同类型的option是可以混用的,但是混用最好用空格分开,因为UNIX语法和BSD语法连接使用时解析出来的操作参数可能会与你想要的不一致,例如:ps au ==> ps a u ;ps -au ==> ps -a -u
ps命令参数有很多,这里就不再过多赘述,详细可以ps --help all查阅,这里我们只给出应用频率最高的几组命令

常用命令组合

表头项 说明
USER 进程用户名
PID 进程ID
%CPU CPU使用率
%MEM 内存使用率
VSZ virtual memory size 虚拟内存使用量(KB)
RSS resident set size 实际物理内存使用量(KB)
TTY 该进程属于哪个终端:?表示与终端机无关;tty1-tty6表示本机登陆程序;pts/0 pts/1 ... 表示由网络连接进主机的程序。
STAT 进程状态,R-running S-sleep T-trace Z-zombie
START 启动时间
TIME 实际使用CPU时间
COMMAND 运行该程序的实际命令

英文简写速记
VSZ:(V = virtual memory) (SZ = size)
RSS:(R = resident) (S = set)(S = size)
tty:teletypes
pts:pseudo-terminal slave
注意 ps aux 与ps -aux 是不同的!!!
前面我们说到如果选项参数是连续的,那么有无‘-’直接影响到了命令的解析,比如ps aux就会被解析成 ps a u x ,同理ps -aux 可以被解析成ps -a -u x,注意没有-x这个选项,并且-u 后边会接参数代表user,如果系统中存在x这个用户,那么ps -aux 表示的是x用户对应的进程除去控制进程和无终端进程外的所有进程,并以基于用户的格式打印,如果没有此用户,则行为与 ps aux一致


表头项 说明
UID 进程用户名
PID 进程号
PPID 父进程号
C CPU资源占用百分比
STIME 进程启动时间
TTY 终端
TIME CPU实际占用时间
CMD 运行该程序的实际命令


2. top

top格式是top [options]

参数 说明
-c 以全命令方式显示
-p [,pid] 只显示对应pid的进程的运行信息
-n [,num] 运行多少此后停止刷新
-d [,num] 每num秒刷新一次
-S 开启CPU时间累积模式,开启后会讲已完成或者消失的子进程的CPU时间累加在父进程上,注意是大写

2.1 top打印格式详解

top - 22:28:35 up 10 days,1:24 1 user, load average: 0.00,0.01,0.05
系统当前时间 系统已运行时间 当前登陆用户 系统平均负载

特殊字段解释:load average :1分钟平均值,5分钟平均值,15分钟平均值。这个平均值=核心数表示满负载,过低证明此服务器任务不饱和,过高尤其是达到核心数的两倍以上,那就甭睡觉了。根据实际经验值,平均值不大于(核心数*0.7),算是安全状态,为什么平均值是核心数的0.7倍呢?因为这只是平均值,保证系统健壮,就必须预留出安全空间给访问峰值。

Tasks: 74 total, 1 running, 73 sleeping, 0 stopped, 0 zombie
进程总数 正在运行进程数 休眠中的进程数 停止的进程数 僵尸进程数
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
user用户占用百分比 system内核占用百分比 nice用户进程空间内改变过优先级的进程占用百分比 idle空闲百分比 IO-wait进程等待占用百分比 hardwareInterrupts硬件中断百分比 softwareInterrupts关键中断 stolenFromVM虚拟CPU的情况

注:id (idle)值用到的比较多,其表示系统的闲忙程度

KiB Mem : 1015564 total, 80008 free, 113580 used, 821976 buff/cache
物理内存总数 空闲物理内存数 使用物理内存数 作为内核缓存的内存量

Mem = used + free + buff/cache

buff/cache是存在与实实在在的物理内存之中,一种缓冲机制,如果给所有应用分配足够内存后,内存依然存在剩余,Linux会尽量利用这些空闲空间,提高整体I/O效率,这部分又被划分成cache(page cache)和buffer(buffer cache)区分利用。
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/proc.rst?id=HEAD
此文档中对这两个缓冲的解释
Buffers
Relatively temporary storage for raw disk blocks
shouldn't get tremendously large (20MB or so)
(原始磁盘块的临时存储,不可过大(20MB左右))
Cached
in-memory cache for files read from the disk (the
pagecache). Doesn't include SwapCached
(内存中高速缓存,用于存储磁盘中读取来的文件。(页面缓存),不包括SwapCached)
buff是块设备缓冲区,主要是为了提高内存和低速iO设备(如磁盘)之间的数据交换速度而设计。而cache是为了提高CPU与内存之间的数据交换速度而设计的。
我们扩展的想一下为什么要有buffer cache和page cache呢?
page cache(页缓存) :读文件时,首先会到页缓存中查找,看是否有数据,有,则将数据拷贝到用户空间,交由用户处理,没有,从磁盘中拷贝data页到页缓存中,再拷贝到用户空间。这样提高了第二次以后的读写效率,不会让CPU空太久。
buffer cache(缓冲):Linux是通过inode对磁盘文件进行管理的,当我们从磁盘中读取文件时,首先我们要将包含目标dentries和inodes页读进来,但是由于这个页不是data页而是Metadata页(元数据页),所以不会被读到页缓存中,其会被读到buffer cache中缓冲起来,只不过这次我们期待的是下次需要读取文件的inode在这张Metadata页中,如果命中,我们就节约了一次磁盘文件读取过程。

KiB Swap: 0 total, 0 free, 0 used. 718124 avail Mem
交换区总量 交换区空闲量 交换区已使用量(注意此处为句号) 回收buff/cache部分空间且不发生swap交换后,可以使用的内存

由第四行的扩展信息可知,buff/cache是缓冲机制,内存空闲时被占用,如果内存不够时,被占用的部分内存将会被释放以供系统使用,那么多少内存可以被释放呢?这个由系统决定,由于某些正在运行的程序,并非所有的缓存页都可以被回收。

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
进程ID 所属用户 进程实际优先级(priority也叫动态优先级) 优先值(nice也叫静态优先级) 虚拟内存占用量 物理内存占用量 共享内存占用量 进程状态 CPU使用占比 物理内存使用占比 累积CPU占用时间 命令

PR与NI到底有什么区别?
NI:nice值,又名静态优先级,默认继承于父进程,可以以手动设置,可以影响进程优先级,它只是代表着该进程抢占资源的能力,nice值越低的进程越不好说话,所谓会哭的孩子又奶吃,所以nice值越低的进程抢占CPU的能力越强,也就越有可能优先级高。
PR:priority,又名动态优先级,是根据内核调度动态变化的,是实际的优先级
它们之间的联系就是进程初始的PR是根据NI值的设定生成的。

2.2 常用命令

2.1 中我们详细分析了TOP打印出的字段代表着哪些含义,下面我们将详细的看一下常用的命令

命令 说明
M 以驻留内存大小进行排序
P 以cpu占用百分比排序
T 以CPU占用时间排序
设置命令 说明
-> 选中光标所在的表头项,然后可以利用上下方向键对表头显示进行设置
d 删除光标所在的表头项
<space> 将光标选中的表头项(添加/删除)到表头
s 按照选定的表头项排序进程表
q或<Esc> 离开当前设置模式

3. htop

htop 实际上就是top命令的升级版,更加直观清晰的打印出当前系统的详细信息,并且增加了很多高效的交互命令,完全可以取代top命令,唯一的缺点就是不是linux系统默认的命令,需要手动安装。例如,CentOS中直接应用命令yum install htop,即可。
当你运行htop,你会发现终端界面像GUI程序一样,简单方便快捷,每一步都有提示。


3.1 快捷键操作

它提供了F1~F10的快捷操作

快捷键 说明
F1 help 帮助
F2 Setup 设置
F3 Search 搜索进程
F4 Filter 增量进程过滤器,只作用与命令字符串
F5 sorted/Tree两种显示方式切换(sorted以排序方式显示,以s树型结构显示)
F6 SortBy/Collap,当F5设置为Sorted时SortBy可以设置以哪个数据对进程进行排序,如果设置为Tree时,可以设置树形某根结点折叠或展开显示
F7 减少Nice值以提高进程优先级
F8 增加Nice值以降低进程优先级
F9 对进程传递信号
F10 结束htop

3.2 特殊快捷键详细解读

3.2.1 F2

按下F2,会发现最左一列是setup的类型,注意最下方是操作提示信息,可以做到无需记忆即可操作。

setup分类 说明
Meters 表示顶端显示信息的设置
DisPlay Options 进程表中每一行的显示格式
Colors 终端颜色设置
Colums 进程表的表头项
选项 说明
Tree View 进程关系以树形结构显示
Shadow other users' processes 将其他成员下辖的进程颜色至为暗色调
Hide kernel threads 不显示内核线程
Hide userland process threads 不显示用户程序内部线程
Display threads in a different color 以不同的颜色显示线程
Show custom thread names 显示自定义线程名,(程序中可以为自己的线程添加一个别名以助于区分)
Show program path 显示程序全路径
Highlight program "basename" 高亮程序基名(基名相当于绝对路径中最后一个文件夹或文件的名字)
Highlight large numbers in memory counters 高亮显示内存占用量大的数值
leave a margin around header 进程表表头与最上方系统数据中间留出空白显示
Detailed CPU time (System/IO-Wait/HardIRQ...) 最上方系统信息中CPU信息已详细信息格式显示
Count CPUs from 0 instead of 1 CPU个数统计从0开始
Update process names on every refresh 每次刷新时更新进程名
Add guest time in CPU meter percentage CPU百分比统计中加入为来宾操作系统运行一个虚拟CPU所花费的时间

经常用到的操作提示主要有以下几个

光标位置 提示
在ActiveColumes下面对某一项时 (调整进程表表头显示顺序F7向上F8向下) F9将此项溢出进程表表头 F10保存并返回
AvailableColums下面的某一项时 F5 将当前选项添加至进程表的表头,F10保存并返回

下面我们将对常用的进程表头项进行讲解

表头项 含义
PID 进程ID号
USR 该进程隶属于哪个账户
PRIORITY 该进程的动态优先级
NICE 该进程的静态优先级
M_SIZE 该进程所占用的虚拟内存量
M_RESIDENT 该进程所占用的物理内存量
M_SHARE 该进程所占用的共享内存量
STATE 进程当前状态
PERCENT_CPU CPU占用百分比
PERCENT_MEM 该进程当前物理内存占用百分比
TIME CPU应用累积时间
Command 进程启动命令
PPID 父进程号
UTIME 该进程在用户空间消耗的CPU时间
STIME 该进程在内核空间消耗的CPU时间

3.2.2 F3

此查找功能为全字符匹配,没有正则匹配功能,全局搜索,如果只想匹配进程路径或者进程名中的字符,请使用F4筛选功能

  1. 点击F3 输入需要搜索的 需要匹配的字符
  2. 继续查找按F3
  3. Esc 退出查找模式

3.3 特殊命令

之前所讲的内容都是与设置有关,设置在第一次使用htop后,基本上不会有太大的变动,实际操作中最常用的实际上是以下几个命令

3.3.1 排序篇

常用命令 说明
P 以CPU占有率为排序基准
M 以内存占有率大小为排序基准
T 以CPU实际使用时间为排序基准
F5+F6 在F5为排序模式下,F6可以很直观的选择任何一个表头项进行排序
I 升序降序切换
t 或F5 树形方式和排序方式切换,当进程表以树形方式显示的时候P,M,T,I等列排序命令将会失效

3.3.2 调试篇

调试命令 说明
u 只显示指定用户的进程
l 显示光标所在进程的文件列表
s 显示光标所在进程的系统调用情况,F9可以对trace起停进行控制
上一篇 下一篇

猜你喜欢

热点阅读