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

标签 c++ linux multithreading profiling cpu-usage

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

设计大多非常简单——大多数线程都实现了事件对象设计模式:线程有一个线程安全的队列,来自其他队列的请求被推送到队列中,而线程只轮询队列并处理传入的请求。已处理的请求导致将新请求推送到下一个处理线程。

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

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

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

最佳答案

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

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

3) 如果您使用的是 SMP 系统,请查看 numa 设置, 就我而言,这造成了严重破坏。 /proc/appPID/numa_maps 将快速查看内存访问是如何发生的。 numa 未命中会导致跳跃。

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

关于c++进程cpu使用率跳转导致检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3065378/

相关文章:

java - 多线程、计算密集型应用程序的潜在问题

python - 使用 keras fit_generator 进行多处理时出现运行时错误

c++ - 当 min 和 max 为正时,Rand() 返回负数

c++ - WString 实现 - 返回以 null 结尾,我走的路是否正确?

linux - Auditd 未捕获目录删除事件

linux - 确定 linux 系统上每个唯一的进程所有者

c++ - 将十亿整数初始化为值 1

c++ - C++中递增和递减运算符的优先级

c++ - 尽可能在编译时强制执行函数契约

multithreading - 在Metal中同步网格中的所有线程