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在哪里获取实时数据的主要内容,如果未能解决你的问题,请参考以下文章

抖音直播在巨量哪里看实时数据

VB如何获取网页动态数据

如何获取新浪实时股票行情数据

我想在我的 Django 应用程序中发送每周电子邮件。从数据库中提取数据并实时发送电子邮件的代码应该在哪里?

使用 PHP 和 jQuery 进行实时聊天。在哪里存储信息? mysql还是文件?

大数据Spark实时搜索日志实时分析