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

Man*_*uel 2 linux monitoring central-processing-unit centos

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

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

Kyl*_*ndt 8

您可以尝试使用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
Run Code Online (Sandbox Code Playgroud)

strace使用-cswitch 也会给你类似的输出,但会显示系统调用(库正在使用的调用——所以更深一层)。

这两个故障的警告是这些是每次通话花费的挂钟时间,它没有显示这是活动时间还是空闲时间。

如果您有代码并想全力以赴,则需要代码分析。Stack Overflows “我可以用什么来在 Linux 中分析我的 C++ 代码? ”应该让你开始。我已经将Valgrind与 C 代码一起使用并喜欢它。