系统监控是运维工做中重要的一环,本文以 atop 工具为例来介绍系统的重要监控项。mysql
atop可使用yum或apt包管理器进行安装。atop man page 中详细说明了 atop 中各监控项含义及atop命令用法。linux
如上图所示, atop 的界面分为上半部分的系统监控项和下半部分的进程列表。正则表达式
atop 每10s更新一次系统监控项以及在这段时间内状态发生变化的进程,按下A键能够查看所有进程。sql
第一行PRC显示整体进程情况:缓存
#proc
为当前总进程数,
#trun
表示 running 状态线程数#tslpi
表示 sleeping interruptible 状态的进线程数#tslpu
表示 sleeping uninterruptible 状态线程数#zombie
表示僵尸进程数linux 中进程有两种 sleep 状态:服务器
一个进程使用fork建立子进程,若是子进程退出,而父进程并无调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。大量僵尸进程可能会占用进程描述符空间致使没法建立进程。网络
孤儿进程是容易与僵尸进程混淆的一类进程,孤儿进程是父进程终止的进程,它们会被 init 进程接管并不会产生危害。运维
在 atop 中每一个 CPU 逻辑核心拥有一个 cpu
行表示自身状态, 最前面的 CPU 行则展现系统总览。异步
CPL 行表示 CPU 负载(CPU Load):tcp
系统负载
CPU 负载或称为系统负载是一个容易被误解的监控项,它的定义为内核运行队列中 running 或 uninterruptible sleep 状态的进程的平均数与CPU计算能力的比值。
系统负载 1.0 说明CPU刚好满载,当系统负载大于1.0时会有进程由于等待CPU而阻塞。在多核系统中,系统负载等于CPU核心数表示刚好满载,如在上图所示双核系统中,load=2说明刚好满载。
上文已经说明,uninterruptible sleep 进程一般是在等待IO, 当网络异常或磁盘故障时会致使大量进程处于 uninterruptible sleep 状态从而致使 Load 急剧上升。
在常见的服务器程序大多数为IO密集型程序,常见的CPU密集型任务包括:
当咱们发现 CPU 使用率上升时,咱们能够优先考虑是否在上述CPU密集型任务。
MEM 行描述内存使用状况:
页缓存是 Linux 处理文件IO的机制,因为磁盘的读写速度远远低于内存和CPU的运行速度,所以内核将文件映射为页缓存在内存中,CPU 读取文件时首先访问页缓存,若目标页未被缓存则会产生一个页缺失中断,中断处理器会从磁盘中读取文件加载到内存中,必要时会将不经常使用的页从内存中逐出。
与读取过程相似,CPU 不会直接写磁盘而是将更改写入相应的页,修改后的页就会成为脏页(dirty page), 脏页的内容会被异步地写入磁盘。
在一些文档中 buff 被笼统地称为文件系统缓存,在 man page 中 buff 的定义为 the amount of memory used for filesystem meta data
即文件系统元数据缓存。
PAG 行表示页缓存的使用状况:
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 分区使用状态:
当物理内存不足时,内核会将进程内存中不经常使用的页逐出内存写入磁盘中的 Swap 分区,当进程须要读取这些页时再将它们从磁盘中加载到内存。
DSK 列描述磁盘使用状况:
网络层一般包含 transport、network、 eth 和 lo 行, 分别表示传输层、网络层、以太网(数据链路层)和本地回环的监控指标。
进程列表有多个视图分别展现不一样方面的数据:
atop 默认展现过去10s内状态发生变化的进程,按下A键能够查看所有进程。
默认视图展现经常使用的监控项:
简单介绍一下进程状态
按M键能够进入内存视图查看进程的内存使用状况:
在 Linux 的内存管理系统中须要读取磁盘才能解决缺页中断称为大错误(Major Page Fault), 不须要读取磁盘能够解决的缺页中断被称为小错误(Minor Page Fault)。
通常状况下 MINFLT 是由于频繁分配/回收大内存块致使的,能够考虑使用内存池优化程序来减小缺页错误; MAJFLT 是因为物理内存不足致使。
按S键能够进入调度视图(Scheduling View)查看进程运行和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。