c ++进程cpu使用跳转导致检测

时间:2010-06-17 20:26:41

标签: c++ linux multithreading profiling cpu-usage

给定:RHEL 5.3下的多线程(~20个线程)C ++应用程序。 在负载下进行测试时,top显示CPU使用率每秒跳跃10-40%。

设计大多非常简单 - 大多数线程实现了活动对象设计模式:线程具有线程安全队列,来自其他队列的请求被推送到队列,而线程仅轮询队列并处理请求。处理的请求导致将新请求推送到下一个处理线程。

该进程有多个TCP / UDP连接,每个数据都是在高负载下接收/发送的。

我知道我没有提供足够的数据。这是一个非常大的应用程序,我并不熟悉它的所有部分。它现在从Linux上的Windows移植到ACE库(用于网络部分)。

假设问题出在应用程序而非外部问题中,可以使用哪些技术/工具/方法来发现问题。例如,我怀疑这可能是由一些互斥争用引起的。

1 个答案:

答案 0 :(得分:1)

我在某个时候遇到过类似的问题,这里有帮助我的步骤。 1)首先使用strace查看应用程序花费时间执行系统调用的位置。

2)使用OProfile来分析应用程序和内核。

3)如果您使用的是SMP系统,请查看numa设置, 在我的情况下,造成了严重破坏。 / proc / appPID / numa_maps将快速查看如何访问内存。 numa misses会导致跳跃。

4)您已经提到了应用中的TCP连接。 查看MTU大小并查看其设置为正确的值和 根据传输的数据类型,适当使用Nagles延迟。 Nagles Delay