Hopes

          Start Here..

           

          續(xù) ASP.NET中大型Web應(yīng)用OutOfMemoryException異常

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

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

          2) IIS配置上的方案,IIS5.0可安裝一個IIS5Recycle程序,該程序采用服務(wù)的形式來回收工作進程,安裝說明:http://support.microsoft.com/?id=322350,對于IIS6.0可以在應(yīng)用程序池的配置上設(shè)置自動回收工作線程的時間,我一般都會設(shè)在凌晨2點:)

          3) 在.NET Framework的配置上,修改machine.config配置文件中的配置節(jié)<processModel>的屬性“memoryLimit”,這個屬性的值默認為“60”,是一個百分比數(shù)據(jù),我們需要按照服務(wù)器實際的內(nèi)存數(shù),再根據(jù)800M的上限來設(shè)置這個值,那么在達到這個閥值時IIS會自動回收進程

          4) 在Web應(yīng)用程序的開發(fā)中,必須盡可能的減少對內(nèi)存使用的浪費,及時釋放資源,我想說明的有3點:1、通過代碼主動調(diào)用Dispose方法進行資源釋放,2、對于實體類盡可能復(fù)用,不做多余的聲明和創(chuàng)建,3、減少Session的使用,縮短Session的有效期,尤其對于大數(shù)據(jù)對象盡量不要存儲在Session中

          5) 一個比較通用的辦法,在Web應(yīng)用程序的基類中通過try{}catch{}來主動捕捉OutOfMemoryException異常,發(fā)現(xiàn)該異常后直接調(diào)用GC.Collect()進行強制垃圾回收。

          最后,有很多朋友提到32位系統(tǒng)對于大內(nèi)存使用方面可以打開3G模式,這個本身沒有什么問題,只是根據(jù)個人經(jīng)驗,其對單純Web應(yīng)用程序的幫助不大,如果Web服務(wù)器還有更多的用途當然也建議采用此模式.



          如果您正在 .NET Compact Framework 上進行編程,當沒有足夠的內(nèi)存可用于內(nèi)部用途或新的托管對象時,公共語言運行庫會引發(fā)此異常。要避免此異常,應(yīng)避免編寫占用 64KB 或更多內(nèi)存的大方法。
          備注
          過多的托管內(nèi)存使用量通常由以下因素造成:
          1 將大型數(shù)據(jù)集讀入內(nèi)存中。
          2 創(chuàng)建過多的緩存條目。
          3 上載或下載大文件。
          4 在分析文件時過多地使用正則表達式或字符串。
          5 過多的視圖狀態(tài)。
          6 會話狀態(tài)中有過多的數(shù)據(jù)或者會話過多。
          當對 COM 對象調(diào)用一個方法,并且該方法返回包含安全數(shù)組(大小不固定的數(shù)組)的用戶定義類型時,可能引發(fā)此異常,并附帶一條額外的消息“存儲空間不足,無法完成此操作”。這是因為 .NET Framework 無法封送帶有安全數(shù)組類型的結(jié)構(gòu)字段。

          REF:

          http://blog.csdn.net/limmo/archive/2007/01/20/1488329.aspx

          http://hi.baidu.com/melovesmile/blog/item/f69efffd2309a085b901a0bb.html

          http://hi.baidu.com/anwyo/blog/item/921e93132e3cf6d3f6039e75.html

          http://www.cnblogs.com/kwklover/archive/2005/05/05/149787.html

          http://www.360doc.com/content/06/1119/16/1_265250.shtml

          IIS:w3wp.exe進程占用cpu和內(nèi)存過多的處理辦法 http://www.cnblogs.com/emanlee/archive/2010/02/06/1664874.html



          posted on 2012-12-14 15:21 ** 閱讀(124) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          收藏夾

          C#學(xué)習

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 且末县| 昌平区| 彭州市| 南京市| 铜山县| 宣汉县| 延边| 遂昌县| 长顺县| 镇安县| 农安县| 新郑市| 蓬安县| 临高县| 阿拉尔市| 洛宁县| 台安县| 昆山市| 平利县| 合江县| 嫩江县| 西丰县| 酉阳| 黄平县| 会昌县| 朝阳县| 油尖旺区| 施秉县| 曲阳县| 涟源市| 额济纳旗| 高阳县| 都江堰市| 仪征市| 当阳市| 昂仁县| 寻甸| 抚州市| 吉林省| 淳安县| 海林市|