我的CPU利用率很高,有什么办法可以确定我的程序的哪个部分使用了更多的CPU。 它是用C ++编写的程序,运行在CENTOS 5机器上。
我怀疑这个问题在共享库中的使用率很高,但是我怎样才能监视所有共享库使用的CPU数量?
您可以尝试使用ltrace和-c trace(非常类似于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开关会给你类似的输出,但会显示系统调用(库调用 – 更深层次的调用)。
这两个崩溃的警告是这些挂在每个电话的挂钟时间,它不显示这是活跃或空闲时间。
如果你有代码,并想全力以赴,你需要代码分析。 堆栈溢出“ 我可以用什么来分析我的C ++代码在Linux? ”应该让你开始。 我用C代码使用Valgrind ,并喜欢它。
我不认为你可以,但top -H的输出可能会有帮助(它显示了线程的CPU使用率)。 希望有人能够给你一个更好的答案。 此外,这可能是一个简单的误解,但不加载共享库可能会导致过度使用RAM而不是CPU? 你确定CPU是问题吗?