一、atop简介

atop是一款用于监控Linux系统资源与进程的工具,它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可获取相应的atop日志文件进行分析,其比较强大的地方是其支持我们分析数据时进行排序、视图切换、正则匹配等处理。atop是一款开源软件,我们可以从这里获得其源码和rpm安装包。
Linux atop监控工具部署 - 图1
需要注意的是,这里如果想查看网络的详细视图,还需要安装netatop包,该包安装时,需要linux下有kernel 的相关编译环境,需要编译出一个.ko文件,在内核中加载后才可以使用,netatop不安装 ,不影响CPU、mem、disk、io的性能监控。

二、atop数据存储及配置

/etc/init.d/atop start启动atop后,atop默认采集到的数据文件存放在/var/log/atop目录下。日志文件按天进行保存,默认以”atop_YYYYMMDD”的方式命名、每10分钟采集一次数据、保留最近28天的数据 。以上内容是在配置文件/etc/atop/atop.daily 中进行控制的,如下:

  1. [root@localhost ~]# cat /etc/atop/atop.daily
  2. #!/bin/bash
  3. CURDAY=`date +%Y%m%d` #保留的文件名,可以进行自定义修改,如:加上主机名
  4. LOGPATH=/var/log/atop
  5. BINPATH=/usr/bin
  6. PIDFILE=/var/run/atop.pid
  7. INTERVAL=600 # interval 10 minutes ,此处可以修改为30秒或1分钟采集一次
  8. # verify if atop still runs for daily logging
  9. #
  10. if [ -e $PIDFILE ] && ps -p `cat $PIDFILE` | grep 'atop$' > /dev/null
  11. then
  12. kill -USR2 `cat $PIDFILE` # final sample and terminate
  13. CNT=0
  14. while ps -p `cat $PIDFILE` > /dev/null
  15. do
  16. let CNT+=1
  17. if [ $CNT -gt 5 ]
  18. then
  19. break;
  20. fi
  21. sleep 1
  22. done
  23. rm $PIDFILE
  24. fi
  25. # delete logfiles older than four weeks
  26. # start a child shell that activates another child shell in
  27. # the background to avoid a zombie
  28. #
  29. ( (sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \;)& ) #保留最近28天的数据,可以修改为最近一周的
  30. # activate atop with interval of 10 minutes, replacing the current shell
  31. #
  32. echo $$ > $PIDFILE
  33. exec $BINPATH/atop -a -R -w $LOGPATH/atop_$CURDAY $INTERVAL > $LOGPATH/daily.log 2>&1

三、监控字段的含义

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 字段指示各层或活动网口发包数目

    四、视图模视与按键

    1、默认视图(Generic information)

    进入atop信息界面,我们看到的就是进程信息的默认视图(上图下半部分),按g键可以从其他视图跳到默认视图。以简介里的截图为例,我们可以看到PID为31085的find进程在退出前在内核模式下占用了0.45秒CPU时间,在用户模式下占用了0.10秒CPU时间,相对10分钟采样周期,CPU时间占用比例为3%,ST列表示进程状态,N表示该进程是前一个采样周期新生成的进程,E表示该进程已退出,EXC列指示进程的退出码。从进程名在“<>”符号中,我们亦可知该进程已退出。

    2、内存视图(Memory consumption)

    内存视图展示了进程使用内存情况,按m键可进入内存视图。如下图:
    Linux atop监控工具部署 - 图2
    上图下半部分展示了每个进程占用的虚拟内存空间(VSIZE)、内存空间(RSIZE)大小,以及在上一个采样周期中虚拟内存和物理内存增长大小(VGROW、RGROW),MEM列指示进程所占物理内存大小。从上图的PAG列的信息,我们可以知道此时系统内存负载较高,页交换比较频繁,而且可以看出物理内存几乎完全不可用,swap分区也比较繁忙,从进程视图中VGROW和RGROW列可看出 lekker 进程占用内存量大量增长,部分进程占用的内存减少(VGROW或RGROW字段为负值),为lekker进程腾出空间。

    3、命令视图(Command line)

    这个对于查看具体某个命令的详细参数,很容易通过该模式下查看到。比如,我们有多个java程序,普通视图下,可能看到的只显示为java ,但通过命令模式,我们可以方便的区分出,到底是哪个java程序占用资源比较高。如下图:
    Linux atop监控工具部署 - 图3

    4、磁盘视图

    通过按键d 可以进入磁盘视图,可以查看每个进程占用IO的情况。

    5、快捷键汇总

    读取atop日志文件: atop -r XXX
    前进翻页: t
    后退翻页: T
    进程列表前进翻页: ctrl + f
    进程列表后退翻页: ctrl + b
    按时间跳转:
    b
    Enter new time (format hh:mm):
    按hh:mm格式输入时间
    进程视图:
    g —— 默认输出
    m —— 内存相关输出
    d —— 磁盘相关输出
    n —— 网络相关输出
    c —— 命令行输出
    u 查看对应的用户资源使用情况
    p 显示所有每个进程的所有信息占用情况(disk、mem、io)
    P(大写) 正则匹配,显示所有匹配到的进程
    退出atop:q

    五、atopsar 及其他

    atopsar是一个类似于sar 的工具,其可以实时获取数据,也可以通过读取历史文件获取主机的 cpu、load 、io、mem等信息,不过该命令查看到的是全局信息,不是会显示具体某个进程的占用信息(O G D N 几个参数可以显示占用最高的前三个进程),具体用法如下:
    SUSEt:/var/log/atop # atopsar --help
    atopsar: invalid option -- '-'
    Usage: atopsar [-flags] [-r file|date] [-R cnt] [-b hh:mm] [-e hh:mm]
                 or
    Usage: atopsar [-flags] interval [samples]
         Today's atop logfile is used by default!
         Generic flags:
           -r  read statistical data from specific atop logfile
               (pathname, or date in format YYYYMMDD, or y[y..])
           -R  summarize <cnt> samples into one sample
           -b  begin  showing data from  specified time
           -e  finish showing data after specified time
           -S  print timestamp on every line in case of more resources
           -x  never  use colors to indicate overload (default: only if tty)
           -C  always use colors to indicate overload (default: only if tty)
           -M  use markers to indicate overload (* = critical, + = almost)
           -H  repeat report headers (in case of tty: depending on screen lines)
           -a  print all resources, even when inactive
         Specific flags to select reports:
           -A  print all available reports
           -c  cpu utilization
           -p  process(or) load
           -P  processes & threads
           -m  memory & swapspace
           -s  swap rate
           -l  logical volume activity
           -f  multiple device activity
           -d  disk activity
           -n  NFS client mounts
           -j  NFS client activity
           -J  NFS server activity
           -i  net-interf (general)
           -I  net-interf (errors)
           -w  ip   v4    (general)
           -W  ip   v4    (errors)
           -y  icmp v4    (general)
           -Y  icmp v4    (per type)
           -u  udp  v4
           -z  ip   v6    (general)
           -Z  ip   v6    (errors)
           -k  icmp v6    (general)
           -K  icmp v6    (per type)
           -U  udp  v6
           -t  tcp        (general)
           -T  tcp        (errors)
           -O  top-3 processes cpu
           -G  top-3 processes memory
           -D  top-3 processes disk
           -N  top-3 processes network
    

    1、实时显示

    如下为显示,每60s 刷新一次结果,共显示5次,如下官方的示例中,只有一个cpu ,如果有多个CPU,会显示每个core的占用情况。
    $ atopsar -c 60 5
    myhost  2.6.18.3up  #7 Wed May 30 13:57:06 CEST 2009  i686  2009/08/17
    -------------------------- analysis date: 2009/08/17 --------------------------
    14:22:11  cpu %usr %nice   %sys %irq %softirq   %steal    %wait %idle     _cpu_
    14:23:11  all    2     0      8    1        1        0       88     0
    14:24:11  all   32     0     38    1        1        0       28     0
    14:25:11  all   43     0     45    2        1        0        0     9
    14:26:11  all    2     0      2    1        1        0       15    79
    14:27:11  all    2     0      1    0        0        0       11    86
    

    2、读取文件,指定范围

    下面的示例中,指定了读取哪一天的数据文件,并指定起止时间,-A 参数是输出所有项
    $ atopsar -A -b 13:00 -e 13:35  -r atop_20130818
    myhost  2.6.18.3up  #7 Wed May 30 13:57:06 CEST 2009  i686  2009/08/17
    -------------------------- analysis date: 2009/08/17 --------------------------
    13:00:01  cpu %usr %nice   %sys %irq %softirq   %steal    %wait %idle     _cpu_
    13:10:01  all    6     0      8    4        4        0       54    24
    13:20:01  all   10     0     12    4        4        0       56    15
    13:30:01  all   31     0      9    3        3        0       35    19
    13:00:01  pswch/s devintr/s clones/s  loadavg1 loadavg5 loadavg15        _load_
    13:10:01     8042      6256     0.33      1.12     0.99      0.51
    13:20:01     8575      5806     0.34      1.31     1.28      0.89
    13:30:01     6594      4397     0.39      1.29     1.54      1.22
    13:00:01  clones/s pexit/s  curproc curzomb    thrrun thrslpi thrslpu _procthr_
    13:10:01      0.33    0.33      150       0         1     167       0
    13:20:01      0.28    0.26      151       0         1     163       0
    13:30:01      0.71    0.72      143       0         2     173       0
    13:00:01  memtotal memfree buffers   cached  slabmem    swptotal swpfree  _mem_
    13:10:01      995M     12M     48M     718M      56M       1983M   1895M
    13:20:01      995M     13M     60M     705M      57M       1983M   1895M
    13:30:01      995M     13M     62M     702M      57M       1983M   1895M
    ………………输出太多,省略
    

    3、其他

    atop启动后,除了atop 进程本身外,还会启动一个atopacctd 进程,该进程是一个计数进程,其数据文件存放在如下路径:
    /var/run/pacct_source
    /var/run/pacct_shadow.d/current
    /var/run/pacct_shadow.d/N.paf