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

问题描述:

鉴于:多线程(〜20线程)在RHEL 5.3下的C++应用程序。 在负载下进行测试时,top会显示CPU使用率每秒跳跃10-40%。C++进程cpu使用跳转导致检测

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

该进程在每个数据以高负载接收/发送时都有多个TCP/UDP连接。

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

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

+0

那究竟是什么问题呢?高CPU使用率?你不指望“负载下”? – 2010-06-17 20:32:25

+0

我期望稳定的CPU使用率,但它会不断跳转 – dimba 2010-06-17 20:33:16

+0

在Windows上稳定吗? – 2010-06-17 20:52:42

我以前遇到过类似的问题,以下是帮助我的步骤。 1)首先使用strace来查看应用程序花在执行系统调用上的时间。

2)使用OProfile来分析应用程序和内核。 3)如果您使用的是SMP系统,请查看numa设置, 在我的情况下造成了严重破坏。 /proc/appPID/numa_maps将快速介绍如何访问内存。 numa未命中可能导致跳跃。

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