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


69

确定允许一个ASP.NET Web应用程序使用多少工作进程的最佳实践是什么?

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

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


1
我不确定;是在此处还是在ServerFault上是否更合适,请让我知道是否选择了错误,然后将其移开。
Tim Long,2010年

4
继续问两个地方。我认为您的问题在这里很重要。ASP.Net部署的细节通常属于开发人员的专业领域,尤其是与应用程序优化有关的领域。
DOK 2010年

7
我同意DOK。两个地方都合适。开发人员通常是必须告诉网络人员如何配置服务器的人员。因此,他们需要此信息。
NotMe 2010年

1
我目前是这些开发人员之一:)
CokoBWare 2014年

Answers:


65

辅助进程是一种将您的网站的执行跨多个exe进行细分的方法。您这样做有两个原因,一个是如果其中一个工人因运行时问题而瘫痪,那么其他工人就不会失望。例如,如果一个html请求进入,导致该进程没有任何结果,则只有一个工作处理器正在处理的其他请求被杀死。另一个示例是,一个请求可能导致阻塞同一工作人员处理的其他线程。

根据需要的数量,进行一些负载测试。用力地打应用程序,看看只有一个会发生什么。然后再添加一些,然后再次点击。在某个时候,您将达到真正使机器网络,磁盘,cpu和ram饱和的程度。那就是当您知道自己拥有适当的平衡时。

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

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

出于所有目的和目的,您可能会考虑将每个工作进程视为自己的独立Web服务器。除了它们在同一个盒子上运行。


2
实际上,引发此问题的是会话状态问题(请参阅stackoverflow.com/questions/2147578/…)。感谢您的帮助(+1)
Tim Long 2010年

3
默认设置通常为一。您的默认服务器10必须已被修改才能更改其默认服务器。
NotMe 2010年

1
@ChrisLively,会话状态在辅助进程之间共享,实际上会话状态也在具有相同cookie名称的多个网站之间共享。
Akash Kava 2013年

12
@AkashKava:InProc会话状态(默认状态)不在工作进程之间共享。共享它的唯一方法是使用进程外会话状态。这意味着您必须配置一个会话状态服务器。
NotMe 2013年

2
@aaronLS:我相信我想说的是,如果一个工作进程中的一个线程死于可怕的死亡(例如:未捕获的异常),那么一个线程将杀死整个工作进程-包括当前正在运行的其他线程。但是,它不会影响正在执行的其他工作进程(及其线程)。
NotMe

6

内存泄漏

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

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

如果有多个工作进程,则只有一个处于循环模式的进程很慢,而其他进程的运行速度却不错。


3

拥有多个辅助进程的另一种情况是,如果您的应用程序包含阻止其并行化的锁。基于GDI +的图像处理是示例之一。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.