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

背景

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

應用如果是部署在docker容器裏面的,可以限制這個應用的內存。

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

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

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

想想就可怕,資源的隔離沒有做好,導致其他應用也受到了影響。

其實對IIS來說,還是可以對站點做限制的。

如何處理

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

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

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

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

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

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

所以針對這上面說的情況,我們只要限制這個程序池的專用內存限制即可。

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

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

可以通過事件查看器捕獲到對應的事件。

這樣就可以在一定程度上緩解多個應用之間互相影響。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章