【发布时间】:2015-10-13 17:54:28
【问题描述】:
我在我的 Debian 6 虚拟机上设置了 collectd 用于监控和性能分析。 Collectd 的 processes 插件提供有关进程的 cpu 使用情况的统计信息,尽管这些统计信息所具有的单位在任何地方都没有记录。这当然不是瞬间或毫秒,因为在 4 核虚拟机上,几个进程的总 CPU 使用率可能高达每秒 400,000(某个未知单位)。
通过查看 collectd 的源代码(https://github.com/collectd/collectd/blob/master/src/processes.c - 在 ps_read_process 函数中),我发现这些数据是从 /proc/$pid/stat 读取的进程的文件。 proc 手册页(链接-http://man7.org/linux/man-pages/man5/proc.5.html)说那里的 cpu 使用率是以时钟滴答为单位测量的。
这很好,但时钟滴答对于监控和性能分析来说有点随意。我想将时钟刻度值转换为更有意义的值,理想情况下是总 CPU 时间的百分比。在不假设我的处理器提供 3GHZ 时钟滴答的情况下,如何以便携的方式做到这一点?
【问题讨论】:
-
不完全。 sysconf(_SC_CLK_TCK) 为我返回 100,这意味着我每秒拥有(4 个核心)*(100 个滴答声)= 400 个滴答声。为什么有些进程会使用数千个或更多的刻度?
-
4 个物理核心?没有HT?
-
我使用的是 vmware 工作站虚拟机(什么是 HT?)
-
超线程。我不确定您是否可以将与物理硬件相同的计算应用于虚拟机。它可能允许爆发等。我不是专家,所以也许你能从某人那里得到更好的答案:)
标签: linux performance monitoring collectd