简介
dstat是Linux的一个系统性能监测工具,基于Python开发,能够提供系统全局的多维度的性能和资源监测,包括CPU、内存、网络、IO、换页、平均负载等,可以看作是 vmstat、iostat、netstat 和 ifstat 的多功能替代品,并支持通过插件的形式来扩展功能,在性能测试、基准测试和故障排除分析方面非常实用。dstat本身占用资源较低,监控准确可灵活配置,并且可以将性能数据输出为CSV方便数据分析,具备较大的实用价值。本文是对dstat的架构和原理的解析。
由于分析dstat的目的除了学习它以外,还想要探索其是否在Android上面能够发挥作用,因此本文在Android平台中进行分析和实验。但是由于dstat本身完全基于Python开发,而Android上面没有完善的Python运行环境,因此将dstat编译为Android ARM64的可执行二进制Bin,可以在没有Python环境的条件下在Android中直接运行dstat,项目地址github.com/NasdaqGodzi…。
使用
一个全面的命令如下:
dstat.bin -t -cmndrplg --cpu-use --float --color -s -f --debug
-t 每行打印添加时间戳
-cmndrplg:CPU、内存、网络、磁盘、IO Request、进程状态统计、平均负载、换页
--cpu-use:打印各核心的CPU使用率
--float:小数以浮点显示,否则按整数显示
--color:强制输出颜色
-s:swap
-f:full,扩展一些维度的显示;如该选项会让磁盘读写从总量统计切换为分区统计
--debug:打印一些调试信息,同时打印dstat监测对系统资源的消耗(运行时间)
原理和架构
和常规的用户态监测工具一样,dstat需要利用/proc中系统提供的性能记录来实现对系统资源的监测。对于CPU、内存、网络、IO、平均负载等主要为如下几个节点。这几个节点在Android中是存在的,因此理论上只要解决Python环境的问题,那么dstat可以兼容Android。
dstat采用了sched作为调度器,延时到达时,调度器调度一次,遍历各个插件,调用各个插件的性能监测函数执行一次监测,最终输出整体性能数据。其基本流程如下。