Linux 体系监控东西 atop
体系监控是运维工作中主要的一环,本文以 atop 东西为例来引见体系的主要监控项。
atop能够运用yum或apt包治理器举行装置。atop man page 中细致说清楚明了 atop 中各监控项寄义及atop敕令用法。
如上图所示, atop 的界面分为上半部份的体系监控项和下半部份的历程列表。
atop 每10s更新一次体系监控项以及在这段时候内状态发作变化的历程,按下A键能够检察悉数历程。
- 体系状态
- 历程
- CPU
- 内存
- 磁盘
- 收集
- 历程列表
- 默许视图
- 内存视图
- 调理视图
- 监控效劳
体系状态
历程
第一行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 分区余暇空间大小
当物理内存不足时,内核会将历程内存中不经常使用的页逐出内存写入磁盘中的 Swap 分区,当历程须要读取这些页时再将它们从磁盘中加载到内存。
磁盘
DSK 列形貌磁盘运用状况:
- vda: 该列为磁盘装备名,每一个装备具有一行
- busy: 装备处置惩罚IO要求的时候占比
- read: 监控周期内读要求数
- write: 监控周期内写要求数
- KiB/r: 每次读要求的均匀数据量
- KiB/w: 每次写要求的均匀数据量
- MBr/s: 每秒读取的数据量
- MBw/s: 每秒写入的数据量
- avq: io 行列的均匀长度
- avio: 单次读写要求须要的毫秒数
收集
收集层平常包括 transport、network、 eth 和 lo 行, 离别示意传输层、收集层、以太网(数据链路层)和当地回环的监控目标。
- tcpi/udpi/ipi: 吸收的 tcp/udp/ip 数据包
- tcpo/udpo/ipo : 发出的 tcp/udp/ip 数据包
- tcpao: 主动竖立的tcp连接数(active open)
- tcppo: 被动竖立的tcp连接数(passive open), 即经由过程 listen() 竖立的连接数
- tcprs: tcp 重传次数
- tcpie: 读取时发作毛病的次数
历程列表
历程列表有多个视图离别展现差别方面的数据:
- 默许视图(Generic information): 按G键回到默许视图
- 内存视图(Memory information): 按M键进入内存视图,显现历程的内存占用状况
- 敕令行视图(Command Line information): 按C键进入敕令行视图,显现历程启动时细致敕令行参数
- 调理器视图(Scheduling information): 按S键进入视图,显现线程调理、CPU运用和运转统计
- 磁盘视图(Disk information): 按D键进入视图,显现历程的磁盘IO运用状况
- 收集视图(Network information): 按N键进入视图,显现历程的收集IO运用状况
atop 默许展现过去10s内状态发作变化的历程,按下A键能够检察悉数历程。
默许视图
默许视图展现经常使用的监控项:
- PID: 历程ID
- SYSCPU: 在内核态下运用CPU时候
- USERCPU: 在用户态下运用CPU时候
- VGROW: 过去一个监控周期内历程的假造内存空间增进,包括malloc()分派内存、运用同享内存以及free()开释内存形成的空间变化
- RGROW: 过去一个监控周期内历程常驻内存空间(resident memory)增进, 即历程内存空间中驻留在物理内存中未被逐出到SWAP分区的部份。
- RUID, EUID, SUID: 启动历程的UID
- RUID: 登录时的用户ID
- EUID: Effective Uid。平常EUID=RUID, setuid 或 sudo 等指令能以另一个用户身份执行敕令,这个被“代办”的用户即为 Effective User。
- EXC: 历程退出时的返回码
- THR: 历程中的线程数
- S: 历程状态,与ps敕令的历程形貌符雷同
简朴引见一下历程状态
- R: Runing
- S: sleeping interruptible 守候某个事宜
- D: sleeping non-interruptible 平常在守候IO
- Z: Zombie 僵尸历程
- E: 历程在上个监控周期内退出
- T: TASK_STOPPED 或 TASK_TRACED 状态
- TASK_STOPPED: 历程收到 SIGSTOP 信号进入停息状态
- TASK_TRACED: 历程进入停息状态守候跟踪它的历程,比方历程被 gdb 的断点停息
内存视图
按M键能够进入内存视图检察历程的内存运用状况:
- MINFLT: 历程缺页小毛病(minor page fault)的次数
- MAJFLT: 历程缺页大毛病(major page fault)的次数
- VSIZE: 假造内存空间的总大小
- RSIZE: 常驻内存(resident memory)的总大小
- VGROW: 假造内存空间在上个监控周期的增进
- RGROW: 假造内存空间在上个监控周期的增进
- MEM: 物理内存运用占比
在 Linux 的内存治理体系中须要读取磁盘才处理缺页中断称为大毛病(Major Page Fault), 不须要读取磁盘能够处理的缺页中断被称为小毛病(Minor Page Fault)。
平常状况下 MINFLT 是因为频仍分派/接纳大内存块致使的,能够斟酌运用内存池优化程序来削减缺页毛病; MAJFLT 是因为物理内存不足致使。
调理视图
按S键能够进入调理视图(Scheduling View)检察历程运转和CPU状况:
- TRUN: running 状态的线程数
- TSLPI: sleeping interruptible 状态线程数
- TSLPU: 示意 sleeping uninterruptible 状态历程数
- PILI: 调理战略
- PRI,NICE: 优先级,PRI+NICE越低优先级越高
- CPU: CPU 运用时候占比
监控效劳
除了检察当前的状态外,atop 还能够效劳体式格局运转在背景监控并纪录体系状态。
运用 service atop start
或 systemctl start atop
敕令启动atop监控效劳。
atop 默许将数据保存在/var/log/atop
目录下,10 分钟收集一次,保存近来28天的数据。上述设置能够在 /etc/atop/atop.daily
文件中举行修正。
运用 atop -r <filename>
敕令读取日记文件。按t键向前翻页,T键向后翻页,b键跳转到指定时候,时候花样为hh:mm。