11

top应用程序在 Linux 上从哪里获取数据?我会对实时 CPU 负载/pid 数据感兴趣。(我阅读了 /proc/pid 手册页中的几乎所有文档,但信息不存在)。

pid是一个jboss。我需要数据轻量级(轻松导出)。

4

2 回答 2

12

如果有疑问,请使用 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
于 2011-01-28T15:39:40.480 回答
7

proc(5)中所述,在文件中/proc/(pid)/stat您具有以下字段:

utime %lu

此进程已在用户模式下调度的时间量,以时钟滴答为单位(除以 sysconf(_SC_CLK_TCK)。这包括来宾时间、来宾时间(运行虚拟 CPU 所花费的时间,见下文),以便不知道的应用程序的客人时间字段不会从他们的计算中丢失该时间。

stime %lu

此进程已在内核模式下调度的时间量,以时钟滴答数衡量(除以 sysconf(_SC_CLK_TCK)。

要获取特定进程的 CPU 使用率,请使用这些字段。顶级进程将汇总所有线程的 CPU 使用率;对于每个线程的细分,您可以在/proc/(pid)/task.

如果您希望在 CPU 时间超过某个阈值时收到通知,您可以使用clock_getcpuclockid来获取其 cpu 时间时钟的句柄,然后在达到指定级别时通知timer_createtimerfd 。但是,请注意,跨进程 cputime 计时器是 POSIX 规范中的可选功能,可能不受支持(我没有测试过)。

于 2011-01-28T17:22:56.047 回答