2009-08-05 35 views
1

我有一個小的WCF服務,它在VM上運行256個RAM的XP盒子上執行。aspnet_wp由於高內存消耗而不斷回收。我該如何解決它?

當我提出一個要求(約爲5mbs請求大小),該服務我總是在事件日誌中以下消息:

ASPNET_WP.EXE被回收,因爲內存消耗超過了153 MB (可用RAM的60%)。

和調用失敗,錯誤500

我試圖增加內存限制到95%,但它仍然佔用了所有可用內存,並無法以同樣的方式。

它看起來像我的應用程序有問題(我不重複使用byte []緩衝區,也許別的東西),但我找不到這種內存過度使用的根本原因。

分析顯示,我在內存中共享的所有CLR對象不佔用太多空間。

使用windbg進行轉儲分析顯示了相同的情況 - 對象堆沒有那麼大。

如何找出造成這種內存過度使用的原因?

是否有任何方法在流程被回收之前進行轉儲(在mem使用率高峯期間)?

回答

2

苔絲費蘭德斯的博客「If broken it is, fix it you should」有很多提示,技巧和建議,用於整理這類問題。

對你來說特別有用的將是Lab 3: Memory,在那裏她指導你瞭解導致你機器上的所有內存消失的原因。

+0

我學到了很多使用Tess的演練和調試工具。這絕對值得你花時間。 – 2009-08-05 12:34:41

1

可能是很多事情,很難診斷這一個。您是否觀看過perfmon,以查看內存使用情況是否在aspnet進程或服務器本身上達到峯值? 256MB是相當低的,但它應該仍然能夠處理它。你在這臺機器上有SWAP文件嗎?你在什麼時候進行內存轉儲?你是否加入了代碼,並在其他機器上工作?也許它會陷入循環和內存泄漏,直到它崩潰?

相關問題