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

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