限制IIS站点的内存,避免级联影响

背景

代码写的有问题,会很容易出现内存泄露的问题。docker

应用若是是部署在docker容器里面的,能够限制这个应用的内存。服务器

那么,若是是传统的.NET Framework应用,部署在IIS上面呢?blog

老黄曾经遇到过在一台服务器上面,IIS部署了五六个站点。进程

其中一个站点,占用了 五、6G 的内存,然而服务器只有8G的内存,甚至胡时候会把其余一两个站点的应用程序池逼停了。事件

想一想就可怕,资源的隔离没有作好,致使其余应用也受到了影响。内存

其实对IIS来讲,仍是能够对站点作限制的。资源

如何处理

应用程序池中,有两个关于内存的配置:部署

  1. 虚拟内存限制(KB)
  2. 专用内存限制(KB)

虚拟内存限制指的是,工做进程可使用的最大虚拟内存量,超过这个内存量就会致使应用程序池回收。默认值是0,表示不限制。容器

专用内存限制指的是,工做进程可使用的最大专用内存量,超过这个内存量就会致使应用程序池回收。默认值是0,表示不限制。配置

正常来讲,咱们常说的,应用占用了多少内存其实说的就是这个专用内存。

咱们打开的任务管理器,上面看到的内存,也是专用工做集。

因此针对这上面说的状况,咱们只要限制这个程序池的专用内存限制便可。

比如说限制为100MB,就把专用内存限制填102400。

当应用的内存达到这个限制的时候,它会从新拉起一个进程,而后把老的进程kill掉。

能够经过事件查看器捕获到对应的事件。

这样就能够在必定程度上缓解多个应用之间互相影响。

固然最终的解决办法仍是要把内存泄露的bug处理掉。

相关文章
相关标签/搜索