問題:
IIS為優化服務器性能,會自動對它認為休眠的應用程序進行資源回收,資源回收將會導致網站應用程序關閉。
解決方案:
1、設置閑置超時為0,固定回收時間間隔為0,即IIS不主動回收閑置進程。
Ref:Onewaytoconservesystemresourcesistoconfigureidletime-outsettingsfortheworkerprocessesinanapplicationpool.Whenthesesettingsareconfigured,aworkerprocesswillshutdownafteraspecifiedperiodofinactivity.Thedefaultvalueforidletime-outis20minutes.
Ifyouhaveajustafewsitesonyourserverandyouwantthemtoalwaysloadfastthensetthistozero.
2、并設置每天固定凌晨2:00(錯開訪問高峰)回收進程,且在虛擬內存和專用內存占用超過1G(服務器16G內存)時回收進程,防止內存溢出。設置1G是基于目前CRM工作線程內存占用普遍不高,便于內存溢出時及時回收進程。
3、在進程被回收后,程序監測到應用關閉事件,重新啟動應用。

關于內存溢出的說明
.NET的GC機制有這樣兩個問題:
1、GC并不是能釋放所有的資源。它不能自動釋放非托管資源。
2、GC并不是實時性的,這將會造成系統性能上的瓶頸和不確定性。
GC并不是實時性的,這會造成系統性能上的瓶頸和不確定性。所以有了IDisposable接口,IDisposable接口定義了Dispose方法,這個方法用來供程序員顯式調用以釋放非托管資源。使用using語句可以簡化資源管理。
非托管資源:
ApplicationContext,Brush,Component,ComponentDesigner,Container,Context,Cursor,FileStream,Font,Icon,Image,Matrix,Object,OdbcDataReader,OleDBDataReader,Pen,Regex,Socket,StreamWriter,Timer,Tooltip,文件句柄,GDI資源,數據庫連接等等資源。