繁体   English   中英

ASP.NET Web Garden - 我需要多少个工作进程?

[英]ASP.NET Web Garden - How Many Worker Processes Do I Need?

决定允许ASP.NET Web应用程序允许的工作进程数的最佳实践是什么?

在我管理的一台服务器上,创建一个新的AppPool默认为10(最大)工作进程。 其他人建议正常设置是一个。

多个工作流程解决了什么问题,决定多少工作的技术是什么?

工作进程是一种跨多个exe分段执行网站的方法。 你这样做是出于几个原因,其中一个原因是,如果其中一个工人因运行时间问题而遭受破坏,那么就不会让其他人失望。 例如,如果一个html请求进入导致进程无法运行,那么只有那个工作处理器正在处理的其他请求被杀死。 另一个例子是一个请求可能导致阻止同一个worker处理的其他线程。

至于你需要多少,做一些负载测试。 点击应用程序,看看只有一个会发生什么。 然后再添加一些并再次点击它。 在某些时候,你将达到真正使机器网络,磁盘,CPU和RAM完全饱和的程度。 那时你才知道自己有平衡。

顺便提一下,您可以通过machine.config文件控制每个工作进程使用的线程数。 我相信关键是maxWorkerThreads。

现在,请注意,如果使用会话,则不会在工作进程之间共享会话状态。 我一般建议避免会话,但这是需要考虑的事情。

对于所有意图和目的,您可以将每个工作进程视为其自己的单独Web服务器。 除了他们在同一个盒子上运行。

这里的指南非常好: http//msdn.microsoft.com/en-us/library/ms998549.aspx

内存泄漏

另一个最大的优点是处理内存泄漏。 有时您尝试优化代码有多少,但框架本身和其他第三方库中存在内存泄漏。 我们注意到最终我们的应用程序达到了非常高的内存并开始没有内存异常。

因此,我们必须将工作进程的最大虚拟内存限制设置为1GB,并允许多个进程运行。 您甚至可以为单个工作进程设置最大虚拟限制,但这会导致速度减慢,因为当工作进程被回收时,所有请求都很慢,直到工作进程获得良好速度为止。 由于我们的应用程序具有内部缓存(实体框架查询缓存,一些对象池),因此每个操作都会减慢应用程序的启动速度。 这是单个工人进程受到最大伤害的地方。

如果有多个工作进程,则只有一个处于循环模式的进程很慢,但其他进程确实保持良好的速度。

另一种情况是,如果您的应用程序包含阻止其并行化的锁定,那么有许多工作进程是有意义的。 基于GDI +的图像处理就是一个例子。

当我试图找到问题的解决方案时,我找到了它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM