我有一個多線程的過程。每個線程都受CPU限制(執行計算),並使用大量內存。根據資源監視器,該進程從100%cpu利用率開始,但幾個小時後,cpu利用率開始緩慢下降。 24小時後,它在90-95%下降。隨着時間的推移CPU利用率下降
問題是 - 我應該查找什麼,以及可以使用哪些最知名的方法進行調試?
附加信息:
我有足夠的RAM - 大部分是未使用在任何特定時刻。根據perfmon - 內存不增長(所以我不認爲它泄漏)。代碼是.Net和本地C++的混合體,有些數據來回編組。 我在幾臺不同的機器上看到了這個(有24個邏輯核心的服務器)。 我在perfmon中看到的一件事 - 隨着CPU利用率的降低,修改頁面列表字節指示器隨着時間的推移而增加。
編輯1 使用的第三方庫之一是openfst。看起來這與圖書館的一些誤用非常相關。 具體來說,我注意到我有以下警告: 警告LNK4087:CONSTANT關鍵字已過時;利用數據
編輯2
由於問題被關閉,並沒有重開,我會寫我的調查結果和問題是如何在這個問題的解決身體(對不起),用於未來用戶。 原來有一個openfst.def文件,它定義了消耗應用程序/ dll所使用的所有openfst FLAGS_ *符號。我不得不修復那些使用關鍵字「DATA」而不是「CONSTANT」(CONSTANT已過時,因爲它有風險 - 更多信息:https://msdn.microsoft.com/en-us/library/aa271769(v=vs.60).aspx)。之後 - 沒有觀察到更多的CPU利用率下降。 「修改的頁面列表字節」指示器不再增加。我懷疑它與FLAGS的默認值(特別是垃圾收集標誌--FLAGS_fst_default_cache_gc)有關,因爲openfst.def文件中CONSTANT關鍵字的錯誤使用,它們是非確定性的。
結論瞭解您的警告!儘可能地消除它們! 謝謝。
使用一個分析器,在開始時取一個樣本,當慢時候取一個樣本,比較兩者。 –
非常隨機猜測 - 內存碎片導致內存管理需要更長的時間? – SergeyA
如果CPU使用率低於100%,這是因爲SOMETHING阻止了您的進程運行。最有可能的是你實際上內存不足,需要交換。 –