我有一个网站,最近由于内存使用量达到最大值而出现了很多停机时间。我们运行的是一台 VPS,内存为 8GB,Windows Server 2008 R2,IIS 7.5,WebForms 4.0 网站,SQL Express 也运行在同一台服务器上。通常内存使用量远低于 2GB。有一次我发现它迅速增加到最大内存,然后突然下降。
从那时起,我们做了一些改动,几天来一直没问题,所以也许这个问题已经解决了。但是,我也开始通过性能计数器记录信息。我发现 IIS 中的总请求数正在缓慢增加,但随后突然下降。但是,内存并没有对应缓慢增加。(蓝线是内存,紫线是总请求。)
什么会导致此请求增加?我该如何解决?应用程序池回收?如何限制请求长度以使其超时?这是正确的方法吗?
答案1
哪个总请求计数器?仅从名称来看,总请求数就是该应用程序所服务的请求总数。
因此它只会不断增长。
AppDomain 回收(在进程内)或 App Pool 回收(w3wp 进程终止)可能会重置计数器。
一般建议:
- 不要使用编译调试=true 来运行
- 考虑为应用程序池设置基于内存的回收触发器
- 如果 RAM 使用过多,请考虑使用 32 位应用程序池自然地将内存使用限制在 4GB 或更少(使失控问题更少:当进程达到其 4GB 自然内存限制时崩溃比认为 4GB 是舍入误差的进程更容易应对)