前言
Linux上运行大量的后端的业务程序,往往希望得到更快的响应速度,更小的延迟,甚至有严格的PCT 99的指标。而操作系统的复杂度很高,多个因子之间可能会互相影响,从而影响到业务的指标。
在作者的工作环境中,经常使用到atop工具进行问题分析。atop是一个小巧的、高性能、比较全面的系统/进程级别的监控软件,下面就来介绍一下它的主要功能。
分析
- 源代码
源代码目前主要维护在github上面
https://github.com/Atoptool/atop
代码的原作者也是现在的maintainer通常会在几周甚至个把月的时间处理一下Pull Request,如果有新的改动,还是需要一点耐心的。
- 基本原理介绍
在源代码中的atop.c中有如下描述:
atop周期性(默认10s,可调整)的采集系统以及进程的指标,进行差分计算,然后把计算的结果打印到屏幕,或者输出的文件。
- 常见的用法
如果是输出到屏幕,效果如下:
从图中可见,主要分成了两个部分,上面是系统的指标采集,下面是进程的指标的采集。
其中系统的指标中,包括:
进程概况:总数量,在采集的时间内新创建的数量和退出的数量等等。
CPU概况:CPU的总概况以及per-cpu的统计,包括内核态、用户态、irq、idle、steal等采集,还有IPC(Instruction Per Cycle)和主频的信息。
内存概况:总内存、空闲内存、cache、dirty、cache等等。
磁盘信息:盘的IOPS和吞吐等信息。
网络:PPS和带宽检测。
以及其他的GPU、NFS等监控。
总体来看,atop的输出更像是top+iostat+sar的输出的组合。
另外一种用法,就是让atop以后台的方式运行,把数据采集并记录到本地的文件中。可以适当调整启动参数,使用systemctl start atop.service启动之后,atop就会把采集到的信息写入到磁盘之中。如果发生了问题,想要回看当时的系统/进程的情况,可以使用
atop -r /var/log/atop/atop_dddd -b hh:mm
可以查看dddd日期的hh:mm记录的数据。同时,可以使用t向下一帧查看,或者shift+t回看上一帧。
在作者的工作环境中,其中这种用法更加广泛。atop每10s相当于给系统的状态做了一个快照,我们找到出现问题的时间点,然后通过atop来发现是否有异常。
- 更多的使用
在atop的页面上,按y键,可以看到线程级别的数据。
按d键,可以看到IO的情况
按m键,可以看到内存的详细数据
按c键看到详细的参数
以及按g恢复到常规视图,按j可以看到以container聚合的视图(非常适合docker场景),按l调整显示的各项数据等等。
需要注意的时候,atop采集数据的时候,尽量不要加入R选项,因为采集Pss的内存信息会引入内核级别的进程内存锁竞争,导致业务进程的延迟抖动。