asp.net-mvc – 为什么IIS没有清理池回收导致网站内存异常的旧工作进程(w3wp.exe)?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 为什么IIS没有清理池回收导致网站内存异常的旧工作进程(w3wp.exe)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个asp.net-mvc网站,最近我的网络服务器上出现了内存不足的异常。我只有一个应用程序池,我们最近将IIS设置为在达到某个限制后进行回收。前几天我进去看了4个w3wp.exe进程正在运行(每个进程都使用了~1.8GB的内存)

我假设在回收过程中,它不会杀死旧的工作进程,最终我的网站出现了内存异常,因为该框只有8GB内存。我可以在盒子中添加内存,但我担心为什么这些旧的进程没有被清理。

是否有任何建议可以找出为什么这个循环过程没有杀死旧的w3wp.exe进程并让它们运行?有任何建议可以了解根本原因甚至解决方法以避免这种风险吗?

解决方法

当我运行FFMpeg.exe或一些带WPF图形的PDF转换时,我有类似的问题,IIS进程不会关闭,并会发出内存未找到的错误。问题不在于IIS,而是在崩溃过程中阻塞的过程中会出现一些死锁。

解决方法是,将您的网站划分为两个单独的网站,一个应该只对通常没有崩溃的数据库进行事务处理。视频/照片转换,PDF转换或任何其他可能导致崩溃的逻辑等逻辑应移至其他Web服务。并在内部使用来自您网站的HTTP调用来通过Web服务处理它们。

现在,在这种情况下,仍然没有办法绕过Web服务进程崩溃,所以我决定每100个请求回收应用程序池工作者(我看了几个请求后选择了这个数字,平均来说只有在超过1GB之后才会命中200个请求)我通过每个池进行4个进程将应用程序池转换为Web Garden。

此设置的优点是,您可以在以后轻松地将Web服务进程移动到其他计算机,您可以增加/减少每个池的进程数。而您的主要网站,只是做交易过程变得高度响应,因为它不受Web服务的流程回收的影响。

猜你在找的asp.Net相关文章