ASP.NET中OutOfMemoryException異常的處理方案

來源:互聯網
上載者:User

相信做ASP.NET中大型Web應用的人都碰到過OutOfMemoryException這個異常,對於這個問題我研究了很久,在微軟的技術文檔上也瞭解過此問題出現的原因,說實話,到目前我仍然沒有完美的解決方案,這裡只是把我處理該問題的一些經驗提出來和大家一起分享,儘可能的避免該問題的發生。

1) 首先,在硬體的配置上,出現該問題的原因我想很多人已經知道了,那就是IIS對於記憶體的管理存在一些限制,普遍的認識是800M的線程記憶體使用量上限(通過我的一些客戶實踐證明的確如此,甚至更低...),不管是w3wp還是aspnet_wp,這個限制對ASP.NET應用伺服器的機器配置而言其意義是很明顯的,超過2G的記憶體對於單純的Web伺服器而言作用是很微小的,所以在Web伺服器的配置上可在CPU的數量方面多考慮。

2) IIS配置上的方案,IIS5.0可安裝一個IIS5Recycle程式,該程式採用服務的形式來回收背景工作處理序,安裝說明:http://support.microsoft.com/?id=322350,對於IIS6.0可以在應用程式集區的配置上設定自動回收背景工作執行緒的時間,我一般都會設在淩晨2點:)

3) 在.NET Framework的配置上,修改machine.config設定檔中的配置節<processModel>的屬性“memoryLimit”,這個屬性的值預設為“60”,是一個百分比資料,我們需要按照伺服器實際的記憶體數,再根據800M的上限來設定這個值,那麼在達到這個閥值時IIS會自動回收進程

4) 在Web應用程式的開發中,必須儘可能的減少對記憶體使用量的浪費,及時釋放資源,我想說明的有3點:1、通過代碼主動調用Dispose方法進行資源釋放,2、對於實體類儘可能複用,不做多餘的聲明和建立,3、減少Session的使用,縮短Session的有效期間,尤其對於大資料對象盡量不要儲存在Session中

5) 一個比較通用的辦法,在Web應用程式的基類中通過try{}catch{}來主動捕捉OutOfMemoryException異常,發現該異常後直接調用GC.Collect()進行強制記憶體回收。

最後,有很多朋友提到32位系統對於大記憶體使用量方面可以開啟3G模式,這個本身沒有什麼問題,只是根據個人經驗,其對單純Web應用程式的協助不大,如果Web伺服器還有更多的用途當然也建議採用此模式.

希望對大家處理此問題有協助.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.