2010-06-17 26 views
0

鑑於:多線程(〜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

我以前遇到過類似的問題,以下是幫助我的步驟。 1)首先使用strace來查看應用程序花在執行系統調用上的時間。

2)使用OProfile來分析應用程序和內核。 3)如果您使用的是SMP系統,請查看numa設置, 在我的情況下造成了嚴重破壞。 /proc/appPID/numa_maps將快速介紹如何訪問內存。 numa未命中可能導致跳躍。

4)你已經提到過你的應用程序中的TCP連接。 查看MTU大小並將其設置爲正確的值,並根據傳輸的數據類型適當地使用Nagles延遲。 Nagles Delay