系统监控是运维工作中重要的一环,本文以 atop 工具为例来介绍系统的重要监控项。

atop可以使用yum或apt包管理器进行安装。atop man page 中详细说明了 atop 中各监控项含义及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 分区空闲空间大小

当物理内存不足时,内核会将进程内存中不常用的页逐出内存写入磁盘中的 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 startsystemctl start atop 命令启动atop监控服务。

atop 默认将数据保存在/var/log/atop目录下,10 分钟采集一次,保留最近28天的数据。上述配置可以在 /etc/atop/atop.daily 文件中进行修改。

使用 atop -r <filename> 命令读取日志文件。按t键向前翻页,T键向后翻页,b键跳转到指定时间,时间格式为hh:mm。

Linux 系统监控工具 atop的更多相关文章

  1. 管理员必备的Linux系统监控工具

    管理员必备的Linux系统监控工具 #1: top - 进程活动 top提供一个当前运行系统实时动态的视图, 也就是正在运行进程.在默认情况下,显示系统 中CPU使用率最高的任务,并每5秒钟刷新一次. ...

  2. 【转】管理员必备的Linux系统监控工具

    原文连接: 管理员必备的Linux系统监控工具 #1: top - 进程活动 top提供一个当前运行系统实时动态的视图,也就是正在运行进程.在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷 ...

  3. 系统管理员都要知道的 30 个 Linux 系统监控工具

    1. top - 进程活动监控命令 top 命令会显示 Linux 的进程.它提供了一个运行中系统的实时动态视图,即实际的进程活动.默认情况下,它显示在服务器上运行的 CPU 占用率最高的任务,并且每 ...

  4. 非常实用的Linux 系统监控工具

    随着互联网行业的不断发展,各种监控工具多得不可胜数.这里列出网上最全的监控工具.让你可以拥有超过80种方式来管理你的机器.在本文中,我们主要包括以下方面: 命令行工具 网络相关内容 系统相关的监控工具 ...

  5. 管理员必备的20个Linux系统监控工具

    需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成性 ...

  6. linux系统监控工具

    Linux性能监控工具 top   提供运行系统的动态实时视图.显示系统摘要信息以及任务列表 uptime    显示系统平均负载 ps.pstree    提供当前进程列表 free  显示系统中空 ...

  7. 管理员必备的几个Linux系统监控工具

    需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成性 ...

  8. linux系统监控工具glances

    glances linux系统自带了很多系统性能监控工具,如top,vmstat,iftop等等,还有一款监视工具glances,它能把其他几个监控的指标都集于一身.Glances是一个相对比较新的系 ...

  9. Linux系统性能监控工具介绍之-tsar

    Linux系统性能监控工具介绍之-tsar Linux系统性能监控工具介绍之-tsar 2017-03-02 20:25 175人阅读 评论(0) 收藏 举报  分类: LINUX调优(9)    目 ...

随机推荐

  1. linux下安装OpenCV-2.4

    OpenCV(Open Source Computer Vision Library),是一个跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. OpenCV由一系列 C 函数和少量 ...

  2. 通过例子学习C++(二)最小公倍数

    本文是通过例子学习C++的第二篇,通过这个例子可以快速入门c++相关的语法. 题目要求:输入两个整数,求其最小公倍数. 解答方法一:两个数的最小公倍数,是这两个数中的大数,或者是这2个数的倍数中的最小 ...

  3. 通过例子进阶学习C++(五)计算2的1次方至2的64次方之和

    本文是通过例子学习C++的第五篇,通过这个例子可以快速入门c++相关的语法. 1.上篇回顾 在上一篇中,我们通过字符数组计算264次方: 通过例子进阶学习C++(四)计算2的64次方 带着这个问题:为 ...

  4. Linux session(会话)

    笔者在前文<Linux job control>中介绍了进程组(job)的概念以及常见的 job control 操作,本文接着介绍 session 的概念.本文中演示部分使用的环境为 u ...

  5. php获取本年、本月、本周时间戳和日期格式

    时间戳格式: //获取今日开始时间戳和结束时间戳 $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime(0 ...

  6. 「2.0」一个人开发一个App,小程序从0到1,文件剖析

    不知你是不是见到“文件剖析”这4个大字,才点进来看一看的?如果真是的话,那我可以坦诚.真心.负责任地告诉你:你上当了,你上了贼船啦,如果你现在想跳的话,还来得及,反正茫茫大海中,鲨鱼正缺搞程序的人.说 ...

  7. java 语句流程

    一.if条件判断 太简单,不加说明 二.switch条件选择语句 注意: 1.switch(表达式),表达式的数据类型 byte/short/char/int/String/enum 2.别忘记写br ...

  8. Django 信号量

    参考:https://www.cnblogs.com/wupeiqi/articles/5246483.html 一.信号:就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者         ...

  9. Qt Installer Framework翻译(5-1)

    创建离线安装程序 脱机安装程序在安装过程中根本不会尝试连接在线存储库.但是,元数据配置(config.xml)使用户可以在线添加和更新组件. 在公司防火墙不允许用户连接到Web服务器的情况下,脱机安装 ...

  10. .net core webapi搭建(3)Code first+拆层三层+仓储

    将项目拆层 我们要 将项目拆分成 Infrastructure     基础层 Core                   核心层 Utility                  工具 我们想在就 ...