测量特定过程随时间变化的资源利用率
schniepel的Python项目详细描述
Schniepel
测量特定进程随时间变化的资源利用率。
该程序还测量全系统资源的利用/饱和 使过程特定的度量标准变得简单明了。
为Linux构建。Windows和Mac OS支持可能会出现。
突出显示:
- 高采样率:默认情况下,schniepel使用0.5秒的采样间隔 使窄尖峰清晰可见。
- schniepel是为监视进程id更改的程序而构建的。这个 当被监控的过程偶然发生时,对寿命试验有用 重新启动(例如从故障转移场景开始)。
- schniepel可以在无监督的情况下无限长地运行,并具有可预测的磁盘空间 要求(它应用输出文件轮换和保留策略)。
- schniepel帮助保持数据的组织:时间序列数据被写入 HDF5文件,和 使用相关元数据(如程序调用时间、系统)进行注释 主机名和Schniepel软件版本。
- Schniepel配有数据绘图工具(与数据采集分离 程序)。
- schniepel非常重视测量的正确性。核心取样回路 除了度量本身之外,几乎没有什么工作:它将每个样本写入队列。 单独的进程使用此队列并将时间序列数据持久化到 磁盘,以便以后检查。这样可以在磁盘上预测采样率 写延迟尖峰,或通常在背压。这尤其重要 在云环境中,我们有时会看到 秒。
动机
这是因为需要坚固的工具。我们从pidstat开始
sysstat,启动时为
pidstat-hud-p$pid 11
。我们发现它不能正确解释
在同一进程中运行的多个线程,其中的各种问题
此程序中存在各种版本的注意事项(请参见
这里,
此处,以及
这里)。
该程序由
Uber有一个关于通用测量方法和
总的来说似乎是一个很好的工具。然而,它似乎是为
交互式使用(而我们正在寻找一个强大的测量程序
它可以指向一个进程,然后在一个重要的
然而)似乎没有一个像样的方法来坚持
收集磁盘上的时间序列数据以备日后检查(它似乎能够
使用-cpupfile
时编写二进制文件,但有点不清楚
此文件包含以及如何分析数据)。
程序psrecord(有效地 包装具有类似的功能 作为schniepel的基本思想;但是它没有明确的 将数据持久化到磁盘,执行测量本身, 并绘制数据,使其易于出错,而且不适合生产。
用法
提示和技巧
将HDF5文件转换为CSV文件
我建议使用反序列化和重新序列化 熊猫。示例一行:
python -c 'import sys; import pandas as pd; df = pd.read_hdf(sys.argv[1], key="schniepel_timeseries"); df.to_csv(sys.argv[2], index=False)' messer_20190718_213115.hdf5.0001 /tmp/hdf5-as-csv.csv
请注意,这会显著增大文件大小(例如,从50 mib到300 MiB)
注释
施尼佩尔试图不不对称地隐藏测量不确定性。例如, 您可能会看到它测量单线程进程的CPU利用率 略大于100%。这只是测量误差。在其他 像sysstat这样的工具似乎是一种常见的不对称的实践。 当已知测量值在 理论不超过某一限度 (示例)。
必须以
root
权限运行。值
-1
对于某些度量有特殊意义 (nan,不能表示 在HDF5中正确)。示例:磁盘写入延迟-1 ms
表示 在相应的时间间隔内写入。最高有意义的采样率受内核计时器和 簿记系统。
测量值(列及其单位)
要测量的数量。
进程CPU ID
当前运行此进程的CPU的ID。
采样时的瞬时状态。
过程CPU利用率合计
进程的CPU利用率,百分比
过去采样间隔的平均值。
如果已知被检查过程仅包含一个线程,则 由于测量误差,有时仍可能大于100%。如果 进程包含多个线程,则这可能远远超过100%。
这是基于在用户空间和内核空间花费的时间之和。
对于更细粒度的图片,以下两个指标也可用:
proc_cpu_util_percent_user
和proc_cpu_util_percent_system
进程数线程
进程中的线程数。
采样时的瞬时状态。
过程IP插槽打开
当前打开的套接字数。这包括ipv4和ipv6 不区分TCP和UDP,连接状态也不区分 物质.
采样时的瞬时状态。
过程数FDS
此进程当前打开的文件描述符数。
采样时的瞬时状态。
proc磁盘读取吞吐量mibps
和proc磁盘写入吞吐量mibps
在mib/s
基于linux'/proc/<;pid>;/io
rchar
和wchar
。高度相关的
一份文档(强调我的):
此任务导致从存储中读取的字节数。这个 只是此进程传递给read()和pread()的字节总数。 它包括诸如tty io之类的内容,并且不受是否实际的影响 物理磁盘IO是必需的(读取可能已满足 页面缓存)
过去采样间隔的平均值。
过程内存百分比
进程的部分常驻集大小
(rss)相对于机器的物理内存大小,单位为percent
采样时的瞬时状态。
过程CTX开关频率Hz
自愿和 非自愿的上下文切换
过去采样间隔的平均值。
(列表不完整)
有价值的参考资料
关于这个主题的外部参考,我在 开发。
关于系统性能度量和内核时间记帐:
- http://www.brendangregg.com/usemethod.html
- https://www.livictcortex.com/blog/monitoring-and-observatability-with-use-and-red
- https://github.com/uber-common/cpustat/blob/master/readme.md
- https://elinux.org/kernel_timer_systems
- https://github.com/leo-g/devopswiki/wiki/如何计算Linux CPU使用时间和百分比
关于磁盘I/O统计:
- https://www.xaprb.com/blog/2010/01/09/linux iostat如何计算结果/
- https://www.kernel.org/doc/documentation/iostats.txt
- https://blog.serverfault.com/2010/07/06/777852755/(解释iostat输出)
- https://unix.stackexchange.com/a/462732(什么是合并写入?)
- https://stackoverflow.com/a/8512978(iostat中的
%util
是什么?) - https://coderwall.com/p/utc42q/understanding iostat
- https://www.percona.com/doc/percona toolkit/latest/pt diskstats.html
其他:
- https://serverfault.com/a/85481/121951(关于系统内存统计)
关于HDF5的思考:
- https://cyrille.rossant.net/moving-away-hdf5/
- http://hdf forum.184993.n3.nabble.com/file-corruption-and-hdf5-design-concertients-td4025305.html
- https://pytables-users.narkive.com/qh2wlyqn/corrupt-hdf5-files
- https://www.hdfgroup.org/2015/05/whats-coming-in-the-hdf5-1-10-0-release/
- https://stackoverflow.com/q/35837243/145400