昨晚十點鍾的樣子,網站崩潰,開始 service unavailable,最近開始業務高峰,心里一驚,麻痹肯定進程池又異常崩潰了。又碰到什么問題?上次是因為一個異步線程的問題,導致了進程池直接崩潰,后面修改掉了,這次又因為什么?
然后先新建了一個進程池,把網站先跑起來。
查看windows日志,發現如下錯誤:
先爆發了一個oom錯誤,再w3wp.exe崩潰了。
但是我確信,我的內存絕對足夠,一般只占用70%最多。
所以當時我沒辦法找到問題,今天早上,一個同事反饋網站有一個功能異常,大致就是,從上傳的excel中,讀取數據,以前可以讀到顯示,現在不行了。
遂問另外一個負責開發的同事,可能是什么情況(因為代碼沒動過),同事說,是不是換過進程池?(因為以前有時候進程池出問題,第一個解決辦法就是先新建進程池把網站跑起來。)
然后告訴我,是因為沒開啟IIS進程池高級設置那里的的一個選項(這台服務器我們都可以管理配置,他配置過這個選項,我不知道。),如圖:
我聽到以后,
第一個反映就是:那肯定是這個問題造成的了。
第二個反映是:卧槽,前台怎么能把這個開關打開?要知道,前台進程池的w3wp.exe經常會跑到2g以上的內存!!
先普及一下這個開關的作用,因為我的服務器是64位的,windows server 2008,然后讀取excel的時候,用的是oledb,一定要安裝windows office才能用,然后服務器上一直用的是windows office 2003。
so,問題來了:2003相關東西是不能以64位的方式被IIS進程加載的,所以要打開這個開關,讓它能正確加載,但是這樣一來,當前IIS進程將處於32位方式下運行。
so,問題又來了,32位程序,最大可用內存是2g
一切依然明了,首先是同事打開了IIS進程池高級設置的這個開關,導致了IIS進程池的進程以32位方式運行,然后高峰期業務量稍微一高,內存占用馬上超過2g,
OOM 自然來了,然后一直這樣W3WP.EXE自然崩潰了。
所以罪魁禍首就是打開了這個開關。。。。。
所以,暫時的解決辦法,關注一下內存,跑得稍微高了點的時候,及時回收一下進程池。
第二步,想辦法將那個開關變為true,並且讓讀excel的功能能 用。
要讓開關能換為true且功能能正常的,無非就是,要么修改服務器環境,安裝一個2010的office上去,或者修改讀取excel的代碼,不用微軟提供的相關東西。
so,為了不對服務器做很大的改動,果斷選擇后者。
查資料,發現NPOI,很適合我的需求,用之,解決。大概用法見以下鏈接 http://www.cnblogs.com/Jerseyblog/p/6410559.html
以上,記錄一下找到問題過程,以免以后自己忘記,也讓可能有同種問題的人參考之。
===================================================================
以下代碼純粹是為了讓搜索引擎收錄好讓友友或許能百度到這篇文章,可以不用看。是windows錯誤日志詳情。(或許百度就收錄這篇文章,你或許就剛好搜這個錯誤代碼看到了呢?對吧。畢竟我截圖,百度收錄不到這個關鍵代號什么的)
進程主機空閑檢查過程中發生錯誤。
Exception: System.OutOfMemoryException
Message: 引發類型為“System.OutOfMemoryException”的異常。
StackTrace: 在 System.Web.Hosting.ApplicationManager.CloneAppDomainsCollection()
在 System.Web.Hosting.ApplicationManager.IsIdle()
在 System.Web.Hosting.ProcessHost.IsIdle()
錯誤應用程序名稱: w3wp.exe,版本: 7.5.7601.17514,時間戳: 0x4ce7a5f8
錯誤模塊名稱: KERNELBASE.dll,版本: 6.1.7601.19160,時間戳: 0x56bcd5c3
異常代碼: 0xe0434352
錯誤偏移量: 0x0000c52f
錯誤進程 ID: 0x648
錯誤應用程序啟動時間: 0x01d287a8fac9208a
錯誤應用程序路徑: C:\Windows\SysWOW64\inetsrv\w3wp.exe
錯誤模塊路徑: C:\Windows\syswow64\KERNELBASE.dll
報告 ID: a4af05ca-f44f-11e6-9c01-e998e853dd81