atop就是一款用于监控Linux系统资源与进程的工具,它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中。atop是一款开源软件,目前最新版本为2.1,期官方网站为:
http://www.atoptool.nl/

如果要使用yum安装atop,请先安装第三方源:EPEL源

  1. yum install -y atop
3

 

运行:atop,

4

 

系统资源监控字段含义

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

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

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

sys、usr字段分别指示进程在内核态和用户态的运行时间
#proc字段指示进程总数
#zombie字段指示僵死进程的数量
#exit字段指示atop采样周期期间退出的进程数量
CPU列:该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况,我们知道CPU可被用于执行进程、处理中断,也可处于空闲状态(空闲状态分两种,一种是活动进程等待磁盘IO导致CPU空闲,另一种是完全空闲)

sys、usr字段指示CPU被用于处理进程时,进程在内核态、用户态所占CPU的时间比例
irq字段指示CPU被用于处理中断的时间比例
idle字段指示CPU处在完全空闲状态的时间比例
wait字段指示CPU处在“进程等待磁盘IO导致CPU空闲”状态的时间比例
CPU列各个字段指示值相加结果为N00%,其中N为cpu核数。

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

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

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

tot字段指示物理内存总量
free字段指示空闲内存的大小
cache字段指示用于页缓存的内存大小
buff字段指示用于文件缓存的内存大小
slab字段指示系统内核占用的内存大小
SWP列:该列指示交换空间的使用情况

tot字段指示交换区总量
free字段指示空闲交换空间大小
PAG列:该列指示虚拟内存分页情况

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

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

sda字段:磁盘设备标识
busy字段:磁盘忙时比例
read、write字段:读、写请求数量
NET列:多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息

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

进程视图

为了更全面地展示进程信息,atop提供了多种进程视图。
默认视图(Generic information)

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

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

 

内存视图(Memory consumption)

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

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

命令视图(Command line)

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

x8

 

这个模式很直观,应该不用怎么说了.

atop日志:

atop提供了atop.daily:

  1. #!/bin/bash
  2. CURDAY=`date +%Y%m%d`
  3. LOGPATH=/var/log/atop
  4. BINPATH=/usr/bin
  5. PIDFILE=/var/run/atop.pid
  6. INTERVAL=600 # interval 10 minutes
  7. # verify if atop still runs for daily logging
  8. #
  9. if [ -e $PIDFILE ] && ps -p `cat $PIDFILE` | grep 'atop$' > /dev/null
  10. then
  11. kill -USR2 `cat $PIDFILE` # final sample and terminate
  12. CNT=0
  13. while ps -p `cat $PIDFILE` > /dev/null
  14. do
  15. let CNT+=1
  16. if [ $CNT -gt 5 ]
  17. then
  18. break;
  19. fi
  20. sleep 1
  21. done
  22. rm $PIDFILE
  23. fi
  24. # start atop for all processes with interval of 10 minutes
  25. #
  26. $BINPATH/atop -a -R -w $LOGPATH/atop_$CURDAY $INTERVAL > $LOGPATH/daily.log 2>&1 &
  27. echo $! > $PIDFILE
  28. # delete logfiles older than four weeks
  29. #
  30. (sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \; )&
  31. exit 0

保存后放入/etc/cron.daily/atop.daily,我们可以加入crond,每天凌晨执行atop.daily脚本:

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

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐