美文网首页
系统监控之进程篇

系统监控之进程篇

作者: HugiFish | 来源:发表于2019-06-03 14:11 被阅读0次

    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查阅,这里我们只给出应用频率最高的几组命令

    常用命令组合

    • ps aux
      a:显示现行终端机下的所有进程(包括由此终端登陆的所有用户)
      x:显示无控制的所有进程
      所以ps ax 可以表示所有进程
      u:以基于用户的格式打印
      ps aux 格式说明如下
    表头项 说明
    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一致


    • ps -ef
      效果和ps aux 效果一致,只是结果的打印格式略微有区别
      -e:表示显示当前全部进程 等同于 -A 所以 ps -ef 也可称为ps -Af
      -f :表示完全格式打印
    表头项 说明
    UID 进程用户名
    PID 进程号
    PPID 父进程号
    C CPU资源占用百分比
    STIME 进程启动时间
    TTY 终端
    TIME CPU实际占用时间
    CMD 运行该程序的实际命令

    • ps u -u [username]
      u:以用户格式进行结果打印
      -u:列出该用户的进程状态

    2. top

    top格式是top [options]

    • 常用option主要有以下几个
    参数 说明
    -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占用时间排序
    • 设置篇
      f :可以设置进程表表头的选项,按f键后我们将进入设置界面,设置界面如下


    设置命令 说明
    -> 选中光标所在的表头项,然后可以利用上下方向键对表头显示进行设置
    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 进程表的表头项
    • Meters选项说明


    • DisPlay Options选项说明



      下面是进程显示格式说明

    选项 说明
    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起停进行控制

    相关文章

      网友评论

          本文标题:系统监控之进程篇

          本文链接:https://www.haomeiwen.com/subject/fydwtctx.html