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


背景

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

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

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

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

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

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

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

如何處理

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

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

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

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

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

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

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

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

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

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM