如何检查 Linux 中库的 CPU 利用率?

如何检查 Linux 中库的 CPU 利用率?

我的 CPU 利用率很高,有什么方法可以确定我的程序的哪个部分占用了更多的 CPU。这是一个用 C++ 编写的程序,在 CENTOS 5 机器上运行。

我怀疑问题出在共享库的高使用率,但是我如何监控所有共享库使用了多少 CPU 呢?

答案1

您可以尝试使用ltrace跟踪-c(非常相似,strace但用于库调用而不是系统调用)。这并不完整,因为实际上分析代码它可能不是您正在寻找的 CPU 时间细分,但它可能只是您需要的快速 syadmin 级别工具。

kbrandt@kbrandt-acer:~$ ltrace -c xcalc
% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
 66.83    0.222693        4453        50 XtCreateManagedWidget
 28.52    0.095048       95048         1 XtAppInitialize
  0.85    0.002837        2837         1 XtRealizeWidget
  0.83    0.002764        2764         1 XSetWMProtocols
  0.77    0.002581        2581         1 XtGetApplicationResources
  0.42    0.001383          53        26 XtWindow
  0.41    0.001371          54        25 XtDisplay
...
------ ----------- ----------- --------- --------------------
100.00    0.333219                   168 total

strace同样,使用-c开关也会给你类似的输出,但会显示系统调用(库正在使用的调用 - 因此级别更深)。

这两种分类的注意事项是,这些是每次通话所花费的挂钟时间,并未显示这是活动时间还是空闲时间。

如果你有代码,并且想全力以赴,那么你需要代码分析。 Stack Overflow ”我可以使用什么来在 Linux 中分析我的 C++ 代码?“应该可以帮你入门。我已经用过瓦尔格林德用 C 代码并且喜欢它。

答案2

我认为您不能,但 的输出top -H可能会有所帮助(它显示了线程的 CPU 使用情况)。希望有人能给您更好的答案。此外,这可能是一个简单的误解,但加载的共享库不是更可能导致 RAM 占用过高而不是 CPU 占用过高吗?您确定 CPU 是问题所在吗?

相关内容