【问题标题】:measure CPU usage per second of a dynamically linked library测量动态链接库的每秒 CPU 使用率
【发布时间】:2014-12-18 16:24:10
【问题描述】:

我有一个使用动态链接库library.so 的示例应用程序。我正在使用 top 命令测量示例应用程序的 CPU 使用率。但它显示了示例应用程序和 library.so 每秒的 CPU 使用率。但我想查看只有library.so 的CPU 使用率。有没有办法做到这一点?我听说它可以通过 htop 实现,但不知道如何。我使用了树视图,但它显示了几个进程作为示例应用程序进程。我不明白哪个是library.so。我正在使用centos 5.11。内核版本 3.2.63-1.el5.elrepo。

【问题讨论】:

  • 您似乎暗示共享库是一个单独的进程。不是。
  • 那我怎样才能得到只有library.so的CPU使用率呢?难道没有别的办法了吗?我尝试过使用分析器。但是他们提供了很多我不需要的信息。是否有任何分析器不会给我详细报告,而只会给我共享库的 CPU 使用情况?谢谢。
  • 在 HTOP 中,我可以看到 10 个与示例应用程序同名的 PID。如果它们是单个进程,为什么它们具有不同的 PID?还是它们是线程 ID?
  • 您可以使用callgrindvalgrind 的一部分),但它不会立即为您提供您正在寻找的确切数字——您需要总结所采取的说明该库中的所有函数(为此编写一个脚本),您最终会得到一个循环计数而不是“CPU 秒数”。当然还有其他分析器,也许其中一个很有用。你也可以看看ltrace,它可以按库过滤。
  • 它们是线程 ID。

标签: c++ cpu-usage redhat centos5 htop


【解决方案1】:

鉴于库被视为您程序的一部分,一种方法是在您的代码中实现测量。以下最小示例是在 C++11 上实现的,仅运行假设库中的一个函数:

#include <chrono>
#include <iostream>
#include <hypothetical>
int main() {
  using namespace std::chrono;
  system_clock systemClock;
  system_clock::time_point startingTime{systemClock.now()};
  hypothetical::function();
  system_clock::duration libraryTime{systemClock.now() - startingTime};
  std::cout << "Hypothetical library took " << duration_cast<seconds>(libraryTime).count() << " seconds to run.\n";
  return 0;
}

您需要将此扩展到程序从库中调用的所有函数。

【讨论】:

  • 感谢您的回复。但它不可行,因为库进行了很多不同的函数(阻塞/非阻塞)调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多