zoukankan      html  css  js  c++  java
  • atop工具检测linux硬件异常

    引言

    Linux以其稳定性,越来越多地被用作服务器的操作系统(当然,有人会较真地说一句:Linux只是操作系统内核:)。但使用了Linux作为底层的操作系统,是否我们就能保证我们的服务做到7*24地稳定呢?非也,要知道业务功能是由系统上跑的程序实现的,要实现业务功能的稳定性,选择Linux只是迈出的第一步,我们更多地工作是不让业务程序成为稳定性的短板。

    当我们的服务器出现问题的时候,外在的表现是业务功能不能正常提供,内在的原因,从程序的角度看,可能是业务程序的问题(程序自身的bug),也可能是服务器上人为的误操作(不当地执行脚本或命令);从系统资源的角度看,可能是CPU抢占、内存泄漏、磁盘IO读写异常、网络异常等。出现问题后,面对各种各样可能的原因,我们应如何着手进行分析?我们有什么工具进行问题定位吗?

     

    atop简介

    本文要介绍的atop就是一款用于监控Linux系统资源与进程的工具,它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可获取相应的atop日志文件进行分析。atop是一款开源软件,我们可以从这里获得其源码和rpm安装包。

     

    atop使用方法

    在安装atop之后,我们在命令行下敲入”atop"命令即可看到系统当前的运行情况:

    atop默认视图

     

    系统资源监控字段含义

    上图中列出了不少字段以及数值,各字段的含义是什么?我们应该怎么看?以上每个字段的含义都是相对采样周期而言的,下面我们先来关注上图显示的上半部分。

    ATOP列:该列显示了主机名、信息采样日期和时间点

    PRC列:该列显示进程整体运行情况

    1. sys、usr字段分别指示进程在内核态和用户态的运行时间
    2. #proc字段指示进程总数
    3. #zombie字段指示僵死进程的数量
    4. #exit字段指示atop采样周期期间退出的进程数量

    CPU列:该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况,我们知道CPU可被用于执行进程、处理中断,也可处于空闲状态(空闲状态分两种,一种是活动进程等待磁盘IO导致CPU空闲,另一种是完全空闲)

    1. sys、usr字段指示CPU被用于处理进程时,进程在内核态、用户态所占CPU的时间比例
    2. irq字段指示CPU被用于处理中断的时间比例
    3. idle字段指示CPU处在完全空闲状态的时间比例
    4. wait字段指示CPU处在“进程等待磁盘IO导致CPU空闲”状态的时间比例

    CPU列各个字段指示值相加结果为N00%,其中N为cpu核数。

    cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100%

    CPL列:该列显示CPU负载情况

    1. avg1、avg5和avg15字段:过去1分钟、5分钟和15分钟内运行队列中的平均进程数量
    2. csw字段指示上下文交换次数
    3. intr字段指示中断发生次数

    MEM列:该列指示内存的使用情况

    1. tot字段指示物理内存总量
    2. free字段指示空闲内存的大小
    3. cache字段指示用于页缓存的内存大小
    4. buff字段指示用于文件缓存的内存大小
    5. slab字段指示系统内核占用的内存大小

    SWP列:该列指示交换空间的使用情况

    1. tot字段指示交换区总量
    2. free字段指示空闲交换空间大小

    PAG列:该列指示虚拟内存分页情况

    swin、swout字段:换入和换出内存页数

    DSK列:该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息

    1. sda字段:磁盘设备标识
    2. busy字段:磁盘忙时比例
    3. read、write字段:读、写请求数量

    NET列:多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息

    1. XXXi  字段指示各层或活动网口收包数目
    2. XXXo 字段指示各层或活动网口发包数目

     

    进程视图

    为了更全面地展示进程信息,atop提供了多种进程视图。

    默认视图(Generic information)

    进入atop信息界面,我们看到的就是进程信息的默认视图(上图下半部分),按g键可以从其他视图跳到默认视图。

    atop默认视图

    从上图中,我们可以看到PID为3061的find进程在退出前在内核模式下占用了3.43秒CPU时间,在用户模式下占用了0.96秒CPU时间,共使用CPU时间为4.39秒,相对10分钟采样周期,CPU时间占用比例为1%,ST列表示进程状态,N表示该进程是前一个采样周期新生成的进程,E表示该进程已退出,EXC列指示进程的退出码。从进程名在“<>”符号中,我们亦可知该进程已退出。

    内存视图(Memory consumption)

    内存视图展示了进程使用内存情况,按m键可进入内存视图。

    atop内存视图

    上图下半部分展示了每个进程占用的虚拟内存空间(VSIZE)、内存空间(RSIZE)大小,以及在上一个采样周期中虚拟内存和物理内存增长大小(VGROW、RGROW),MEM列指示进程所占物理内存大小。

    从上图的PAG列的信息,我们可以知道此时系统内存负载较高,出现页换出情况,从进程视图中VGROW和RGROW列可看出VirtualBox进程占用内存量大量增长,部分进程占用的内存减少(VGROW或RGROW字段为负值),为VirtualBox进程腾出空间。

    命令视图(Command line)

    按c键我们可以进入命令视图,该视图展示了与每个进程相对应的命令。

    atop命令视图

    有时我们某位“马大哈”同事执行了某个脚本或命令,使得系统资源占用率异常飙高,这时,我们可以很容易地通过atop的命令视图找到导致异常的命令。

     

    atop日志

    每个时间点采样页面组合起来就形成了一个atop日志文件,我们可以使用"atop -r XXX"命令对日志文件进行查看。那以什么形式保存atop日志文件呢?

    对于atop日志文件的保存方式,我们可以这样:

    1. 每天保存一个atop日志文件,该日志文件记录当天信息
    2. 日志文件以"atop_YYYYMMDD"的方式命名
    3. 设定日志失效期限,自动删除一段时间前的日志文件

    其实atop开发者已经提供了以上日志保存方式,相应的atop.daily脚本可以在源码目录下找到。在atop.daily脚本中,我们可以通过修改INTERVAL变量改变atop信息采样周期(默认为10分钟);通过修改以下命令中的数值改变日志保存天数(默认为28天):

    (sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} ; )&

    最后,我们修改cron文件,每天凌晨执行atop.daily脚本:

    0 0 * * * root /etc/cron.daily/atop.daily

     

    小结

    本文对Linux系统资源及进程监控工具atop进行了介绍,对atop所记录信息中的部分字段的含义以及进程视图进行了分析,最后讲述了atop日志文件的保存方式。

    atop工具会根据终端界面的大小调整所显示的字段,因此你使用atop时看到的部分字段可能与以上截图不相同。若想更深入地了解atop工具中字段含义和各种进程视图,请猛击Reference链接。

  • 相关阅读:
    归并排序(Merge Sort)
    AtCoder AGC035D Add and Remove (状压DP)
    AtCoder AGC034D Manhattan Max Matching (费用流)
    AtCoder AGC033F Adding Edges (图论)
    AtCoder AGC031F Walk on Graph (图论、数论)
    AtCoder AGC031E Snuke the Phantom Thief (费用流)
    AtCoder AGC029F Construction of a Tree (二分图匹配)
    AtCoder AGC029E Wandering TKHS
    AtCoder AGC039F Min Product Sum (容斥原理、组合计数、DP)
    AtCoder AGC035E Develop (DP、图论、计数)
  • 原文地址:https://www.cnblogs.com/python-cat/p/7346301.html
Copyright © 2011-2022 走看看