限制IIS站點的內存,避免級聯影響

背景

代碼寫的有問題,會很容易出現內存泄露的問題。docker

應用若是是部署在docker容器裏面的,能夠限制這個應用的內存。服務器

那麼,若是是傳統的.NET Framework應用,部署在IIS上面呢?blog

老黃曾經遇到過在一臺服務器上面,IIS部署了五六個站點。進程

其中一個站點,佔用了 五、6G 的內存,然而服務器只有8G的內存,甚至胡時候會把其餘一兩個站點的應用程序池逼停了。事件

想一想就可怕,資源的隔離沒有作好,致使其餘應用也受到了影響。內存

其實對IIS來講,仍是能夠對站點作限制的。資源

如何處理

應用程序池中,有兩個關於內存的配置:部署

  1. 虛擬內存限制(KB)
  2. 專用內存限制(KB)

虛擬內存限制指的是,工做進程可使用的最大虛擬內存量,超過這個內存量就會致使應用程序池回收。默認值是0,表示不限制。容器

專用內存限制指的是,工做進程可使用的最大專用內存量,超過這個內存量就會致使應用程序池回收。默認值是0,表示不限制。配置

正常來講,咱們常說的,應用佔用了多少內存其實說的就是這個專用內存。

咱們打開的任務管理器,上面看到的內存,也是專用工做集。

因此針對這上面說的狀況,咱們只要限制這個程序池的專用內存限制便可。

比如說限制爲100MB,就把專用內存限制填102400。

當應用的內存達到這個限制的時候,它會從新拉起一個進程,而後把老的進程kill掉。

能夠經過事件查看器捕獲到對應的事件。

這樣就能夠在必定程度上緩解多個應用之間互相影響。

固然最終的解決辦法仍是要把內存泄露的bug處理掉。

相關文章
相關標籤/搜索