背景
代碼寫的有問題,會很容易出現記憶體洩露的問題。
應用如果是部署在docker容器裡面的,可以限制這個應用的記憶體。
那麼,如果是傳統的.NET Framework應用,部署在IIS上面呢?
老黃曾經遇到過在一台伺服器上面,IIS部署了五六個站點。
其中一個站點,占用了 5、6G 的記憶體,然而伺服器隻有8G的記憶體,甚至胡時候會把其他一兩個站點的應用程式池逼停了。
想想就可怕,資源的隔離沒有做好,導緻其他應用也受到了影響。
其實對IIS來說,還是可以對站點做限制的。
如何處理
應用程式池中,有兩個關于記憶體的配置:
- 虛拟記憶體限制(KB)
- 專用記憶體限制(KB)
虛拟記憶體限制指的是,工作程序可以使用的最大虛拟記憶體量,超過這個記憶體量就會導緻應用程式池回收。預設值是0,表示不限制。
專用記憶體限制指的是,工作程序可以使用的最大專用記憶體量,超過這個記憶體量就會導緻應用程式池回收。預設值是0,表示不限制。
正常來說,我們常說的,應用占用了多少記憶體其實說的就是這個專用記憶體。
我們打開的任務管理器,上面看到的記憶體,也是專用工作集。
是以針對這上面說的情況,我們隻要限制這個程式池的專用記憶體限制即可。
好比說限制為100MB,就把專用記憶體限制填102400。
當應用的記憶體達到這個限制的時候,它會重新拉起一個程序,然後把老的程序kill掉。
可以通過事件檢視器捕獲到對應的事件。
這樣就可以在一定程度上緩解多個應用之間互相影響。
當然最終的解決辦法還是要把記憶體洩露的bug處理掉。
如果您認為這篇文章還不錯或者有所收獲,可以點選右下角的【推薦】按鈕,因為你的支援是我繼續寫作,分享的最大動力!
作者:Catcher Wong ( 黃文清 )
來源:http://catcher1994.cnblogs.com/
聲明:
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。如果您發現部落格中出現了錯誤,或者有更好的建議、想法,請及時與我聯系!!如果想找我私下交流,可以私信或者加我微信。