Linux 系统监控工具 atop

atop可以使用yum或apt包管理器进行安装。atop man page 中详细说明了 atop 中各监控项含义及atop命令用法。

Linux 系统监控工具 atop

如上图所示, atop 的界面分为上半部分的系统监控项和下半部分的进程列表。

atop 每10s更新一次系统监控项以及在这段时间内状态发生变化的进程,按下A键可以查看全部进程。

系统状态 进程

第一行PRC显示总体进程状况:

sys, user 表示 CPU 在内核态和用户态的运行时间比例

#proc 为当前总进程数,

#trun 表示 running 状态线程数

#tslpi 表示 sleeping interruptible 状态的进线程数

#tslpu 表示 sleeping uninterruptible 状态线程数

#zombie 表示僵尸进程数

clones 表示在监控周期(默认10s)内 clone() 系统调用次数

linux 中进程有两种 sleep 状态:

interruptible sleep: 进程接收系统信号,可以被系统信号中断

uninterruptible sleep: 进程不接收系统信号,不可被系统信号中断,包括kill -9 (SIGKILL 信号)。此状态的进程通常在等待系统资源,如磁盘IO或网络IO。

一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。大量僵尸进程可能会占用进程描述符空间导致无法创建进程。

孤儿进程是容易与僵尸进程混淆的一类进程,孤儿进程是父进程终止的进程,它们会被 init 进程接管并不会产生危害。

CPU

在 atop 中每个 CPU 逻辑核心拥有一个 cpu 行表示自身状态, 最前面的 CPU 行则展示系统总览。

sys 表示CPU在内核态工作时间比例

user 表示 CPU 在用户态工作时间比例

irq 表示 CPU 处理系统中断所消耗的时间比例

idle 表示 CPU 空闲时间比例

CPL 行表示 CPU 负载(CPU Load):

avg1, avg5, avg15: 过去 1min、5min和 15min 内的平均系统负载

csw 表示监控周期内上下文切换的次数

intr 表示监控周期内中断发生的次数

系统负载

CPU 负载或称为系统负载是一个容易被误解的监控项,它的定义为内核运行队列中 running 或 uninterruptible sleep 状态的进程的平均数与CPU计算能力的比值。

系统负载 1.0 说明CPU恰好满载,当系统负载大于1.0时会有进程因为等待CPU而阻塞。在多核系统中,系统负载等于CPU核心数表示恰好满载,如在上图所示双核系统中,load=2说明恰好满载。

上文已经说明,uninterruptible sleep 进程通常是在等待IO, 当网络异常或磁盘故障时会导致大量进程处于 uninterruptible sleep 状态从而导致 Load 急剧上升。

在常见的服务器程序大多数为IO密集型程序,常见的CPU密集型任务包括:

大规模的排序计算, 如 mysql filesort

大量的正则表达式匹配

大量的 Hash Code 计算

大规模的加解密或压缩解压计算

当我们发现 CPU 使用率上升时,我们可以优先考虑是否在上述CPU密集型任务。

内存

MEM 行描述内存使用情况:

tot: 物理内存总量

free: 空闲内存总量

cache: 页缓存用量

buff: 文件系统元数据缓存用量

slab: 系统内核内存用量

dirty: 需要写回磁盘的脏页用量,这部分内存使用已包含在cache中

页缓存是 Linux 处理文件IO的机制,由于磁盘的读写速度远远低于内存和CPU的运行速度,因此内核将文件映射为页缓存在内存中,CPU 读取文件时首先访问页缓存,若目标页未被缓存则会产生一个页缺失中断,中断处理器会从磁盘中读取文件加载到内存中,必要时会将不常用的页从内存中逐出。

与读取过程类似,CPU 不会直接写磁盘而是将更改写入相应的页,修改后的页就会成为脏页(dirty page), 脏页的内容会被异步地写入磁盘。

在一些文档中 buff 被笼统地称为文件系统缓存,在 man page 中 buff 的定义为 the amount of memory used for filesystem meta data 即文件系统元数据缓存。

PAG 行表示页缓存的使用情况:

scan: 当可用内存不足时扫描的页数,这个值过高说明可用内存不足

stall: 内核紧急将页加载到内存中的次数,这个值过高说明可用内存不足

steal: 虚拟机相关指标

swin: 从 Swap 分区将页加载到内存的次数

swout: 将内存页写入 Swap 分区的次数

scan 和 steal 的解释比较难理解,附上 man page 中的原文:

This line contains the number of scanned pages ('scan') due to the fact that free memory drops below a particular threshold and the number times that the kernel tries to reclaim pages due to an urgent need ('stall')

SWP 行表示 Swap 分区使用状态:

tot: Swap 分区总大小

free: Swap 分区空闲空间大小

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywsxw.html