我的 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 是问题所在吗?