测量特定过程随时间变化的资源利用率

schniepel的Python项目详细描述


Schniepel

测量特定进程随时间变化的资源利用率。

该程序还测量全系统资源的利用/饱和 使过程特定的度量标准变得简单明了。

为Linux构建。Windows和Mac OS支持可能会出现。

突出显示

动机

这是因为需要坚固的工具。我们从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_userproc_cpu_util_percent_system

进程数线程

进程中的线程数。

采样时的瞬时状态。

过程IP插槽打开

当前打开的套接字数。这包括ipv4和ipv6 不区分TCP和UDP,连接状态也不区分 物质.

采样时的瞬时状态。

过程数FDS

此进程当前打开的文件描述符数。

采样时的瞬时状态。

proc磁盘读取吞吐量mibpsproc磁盘写入吞吐量mibps

mib/s

基于linux'/proc/<;pid>;/iorcharwchar。高度相关的 一份文档(强调我的):

< Buff行情>

此任务导致从存储中读取的字节数。这个 只是此进程传递给read()和pread()的字节总数。 它包括诸如tty io之类的内容,并且不受是否实际的影响 物理磁盘IO是必需的(读取可能已满足 页面缓存

过去采样间隔的平均值。

过程内存百分比

进程的部分常驻集大小 (rss)相对于机器的物理内存大小,单位为percent

采样时的瞬时状态。

过程CTX开关频率Hz

自愿和 非自愿的上下文切换

过去采样间隔的平均值。

(列表不完整)

有价值的参考资料

关于这个主题的外部参考,我在 开发。

关于系统性能度量和内核时间记帐:

关于磁盘I/O统计:

其他:

关于HDF5的思考:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从Struts操作的钩子更改表单值(Liferay 6.2)   java如何改变Spring MVC处理url“点”字符的行为   Clojure中使用Java接口的问题   junit如何模拟comosDB azure java集成客户端?   运行函数时发生java错误   netbeans Java。jar文件和依赖项   Eclipse中文本字段中的java输入类型   在JAVA中,将集合变量从实时批处理运行时传递到调用批处理文件   java通过Bean验证API中的自定义消息管理异常   XML到json的转换,在Java中,同时保留数据类型   根据JAVA中的列名从Excel文件中获取单元格值   在AsyncTask的doInBackground中未调用java FirebaseMessagingService   java如何在数据库中插入一行?