top从哪里获取实时数据

发布于 2024-10-14 21:23:03 字数 143 浏览 8 评论 0原文

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

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

Where does top application gets it's data on Linux? I would be interested in real-time CPU load/pid data.(I read allmost all documentation in /proc/pid man page, but the info isn't there).

The pid is a jboss. I need the data lightweight (to be exported easily).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

神魇的王 2024-10-21 21:23:03

如果有疑问,请使用 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

If in doubt, use 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
箹锭⒈辈孓 2024-10-21 21:23:03

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_createtimerfd 当达到指定级别时收到通知。但是,请注意,跨进程 cputime 计时器是 POSIX 规范中的可选功能,可能不受支持(我尚未测试)。

As documented in proc(5), in the file /proc/(pid)/stat you have the fields:

utime %lu

Amount of time that this process has been scheduled in
user mode, measured in clock ticks
(divide by sysconf(_SC_CLK_TCK). This
includes guest time, guest_time (time
spent running a virtual CPU, see
below), so that applications that are
not aware of the guest time field do
not lose that time from their
calculations.

stime %lu

Amount of time that this
process has been scheduled in kernel
mode, measured in clock ticks (divide
by sysconf(_SC_CLK_TCK).

To get CPU usage for a specific process, use those fields. The toplevel process will aggregate CPU usage over all threads; for a per-thread breakdown, you can find the other threads in /proc/(pid)/task.

If you would prefer to be notified when CPU time exceeds some threshold, you can use clock_getcpuclockid to get a handle to its cpu time clock, then timer_create or timerfd to be notified when it hits a specified level. However, note that cross-process cputime timers are an optional feature in the POSIX specification and may not be supported (I've not tested).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文