Hopes

          Start Here..

           

          續 ASP.NET中大型Web應用OutOfMemoryException異常

          相信做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服務器還有更多的用途當然也建議采用此模式.



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

          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和內存過多的處理辦法 http://www.cnblogs.com/emanlee/archive/2010/02/06/1664874.html



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


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


          網站導航:
           

          導航

          統計

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          收藏夾

          C#學習

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 拜泉县| 酒泉市| 青阳县| 化隆| 曲松县| 台江县| 阳城县| 从江县| 海淀区| 姜堰市| 年辖:市辖区| 博乐市| 板桥市| 平陆县| 肥乡县| 宁德市| 蒙阴县| 烟台市| 安溪县| 洞头县| 平定县| 彩票| 荔浦县| 夏津县| 林西县| 梁平县| 西丰县| 苗栗县| 樟树市| 陵水| 宜宾县| 武安市| 郸城县| 于田县| 昌邑市| 巧家县| 天水市| 林西县| 龙岩市| 焦作市| 光泽县|