【问题标题】:How to programmatically get the CPU utilization by the parent thread and sibling threads, from a worker thread?如何以编程方式从工作线程获取父线程和兄弟线程的 CPU 利用率?
【发布时间】:2011-11-12 07:11:39
【问题描述】:

我的多线程应用程序 (c++) 使用 pthreads。应用程序会自动生成线程并按需重用它们,并允许线程在空闲时间过长时取消。

我已经放置了一个“特殊线程”来捕获统计数据,以便在遇到不同情况时查看应用程序的性能。

我等不及进程退出,想知道使用了多少 CPU。

尝试在特殊线程中使用这个,但结果似乎与 ps & top 的输出不匹配:

struct rusage ru;
    double utime, stime, ttime ;

if (getrusage(RUSAGE_SELF, &ru) == -1)
    return;

utime = ru.ru_utime.tv_sec + ( ru.ru_utime.tv_usec / 1000000 ); // Total CPU time used in user space
stime = ru.ru_stime.tv_sec + ( ru.ru_stime.tv_usec / 1000000 ); // Total CPU time used in kernel space
ttime = utime + stime; // Total CPU Utilization

各位高手能否告诉我是否有更好的方法,或者上面是正确的方法,而我实际上还缺少其他东西?

提前致谢。

【问题讨论】:

  • 您的代码看起来不错。唯一的小问题是ru.ru_utime.tv_usec / 1000000 和它的孪生是整数除法,而周围的代码表明浮点除法可能是有意的。不过,这并不能解释测量时间中的任何重大差异。

标签: c++ linux pthreads cpu-usage getrusage


【解决方案1】:

如果这是在 Linux 上,您可以使用特殊的 /proc 文件系统来查找有关您的进程的各种有趣信息。我不是专家,但我很确定 cpu 使用率统计数据在某处。

【讨论】:

    【解决方案2】:

    好的,我明白了!

    我在上面发布的代码是相当正确的。 我的困惑只是由于不正确的观察造成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      相关资源
      最近更新 更多