top在哪里获取实时数据
Posted
技术标签:
【中文标题】top在哪里获取实时数据【英文标题】:where does top gets real-time data 【发布时间】:2011-06-17 03:48:21 【问题描述】:top
应用程序在 Linux 上从哪里获取数据?我会对实时 CPU 负载/pid 数据感兴趣。(我阅读了 /proc/pid 手册页中的几乎所有文档,但信息不存在)。
pid 是一个 jboss。我需要数据轻量级(易于导出)。
【问题讨论】:
负载是系统范围的指标,而不是进程指标。您是指进程 CPU 使用率吗? 您确定该信息不存在吗?例如'find /proc/1',有很多东西,你都看完了吗? @Xander,显然不是,因为事实上,top 获取数据的地方... :) @bdonlan 没有用于 cpu 使用的 /proc/pid/stat 字段。数据必须来自该文件数据的某种计算/聚合。但是,算法是什么? 【参考方案1】:如果有疑问,请使用 strace(1)!
open("/proc/2/stat", O_RDONLY) = 4
open("/proc/2/statm", O_RDONLY) = 4
open("/proc/3/stat", O_RDONLY) = 4
open("/proc/3/statm", O_RDONLY) = 4
【讨论】:
嗨,感谢 strace 提示!这很棒。唯一的问题是,在 strace 转储之后,我无法得到它实际写入 stdout 的 cpu 负载(因为分析你推荐的文件我找不到我正在搜索的内容......)【参考方案2】:如proc(5) 中所述,在文件/proc/(pid)/stat
中,您有以下字段:
utime %lu
此进程已安排的时间量 用户模式,以时钟节拍测量 (除以 sysconf(_SC_CLK_TCK)。这个 包括来宾时间,guest_time(时间 花在运行虚拟 CPU 上,请参阅 下面),这样的应用程序是 不知道客人时间字段做 不要失去他们的时间 计算。
stime %lu
这个时间 进程已在内核中调度 模式,以时钟滴答测量(除 通过 sysconf(_SC_CLK_TCK)。
要获取特定进程的 CPU 使用率,请使用这些字段。***进程将汇总所有线程的 CPU 使用率;对于每个线程的细分,您可以在 /proc/(pid)/task
中找到其他线程。
如果您希望在 CPU 时间超过某个阈值时收到通知,您可以使用 clock_getcpuclockid 获取其 cpu 时钟的句柄,然后在达到指定级别时收到通知 timer_create 或 timerfd .但是请注意,跨进程 cputime 计时器是 POSIX 规范中的可选功能,可能不受支持(我没有测试过)。
【讨论】:
实际上我相信“ps -Lp(pid) opcpu”确实聚合了所有线程,不是吗?不幸的是, ps 只给出了该 cpu/线程负载的快照(它不能用于实时监控),并在 bash 脚本中聚合该 jboss 中的所有 300 个线程,通过“cat”-ing 所有特定于那个的文件child pids 它看起来有点不可靠。 @Xander,经过检查,发现***进程聚合在所有线程上。所以你可以只使用 stat 文件进行监控。我还在clock_getcpuclockid 上添加了一些注释,这也很有帮助。以上是关于top在哪里获取实时数据的主要内容,如果未能解决你的问题,请参考以下文章
我想在我的 Django 应用程序中发送每周电子邮件。从数据库中提取数据并实时发送电子邮件的代码应该在哪里?