决定允许ASP.NET Web应用程序允许的工作进程数的最佳做法是什么?
在我管理的一台服务器上,创建一个新的AppPool默认为10(最大)工作进程。其他人认为正常设置是一个。
多个工作流程解决了什么问题?决定多少工作的技术是什么?
答案 0 :(得分:54)
工作进程是一种跨多个exe分段执行网站的方法。你这样做是出于几个原因,其中一个原因是,如果其中一个工人因运行时间问题而遭受破坏,那么就不会让其他人失望。例如,如果一个html请求进入导致进程无法运行,那么只有那个工作处理器正在处理的其他请求被杀死。另一个例子是一个请求可能导致阻止同一个worker处理的其他线程。
根据您需要的数量,进行一些负载测试。点击应用程序,看看只有一个会发生什么。然后再添加一些并再次点击它。在某些时候,你将达到真正使机器网络,磁盘,CPU和RAM完全饱和的程度。就在你知道自己有平衡的时候。
顺便说一句,您可以通过machine.config文件控制每个工作进程使用的线程数。我相信关键是maxWorkerThreads。
现在,请注意,如果使用会话,则不会在工作进程之间共享会话状态。我一般建议尽量避免会话,但需要考虑。
对于所有意图和目的,您可以将每个工作进程视为其自己的单独Web服务器。除了他们在同一个盒子上运行。
答案 1 :(得分:4)
答案 2 :(得分:4)
内存泄漏
另一个最大的优势是处理内存泄漏。有时您尝试优化代码有多少,但框架本身和其他第三方库中存在内存泄漏。我们注意到最终我们的应用程序达到了非常高的内存并开始没有内存异常。
因此,我们必须将工作进程的最大虚拟内存限制设置为1GB,并允许多个进程运行。您甚至可以为单个工作进程设置最大虚拟限制,但这会导致速度减慢,因为当工作进程被回收时,所有请求都很慢,直到工作进程获得良好速度为止。由于我们的应用程序具有内部缓存(实体框架查询缓存,一些对象池),因此每个操作都会减慢应用程序的启动速度。这是单个工人流程受到最大伤害的地方。
如果有多个工作进程,则只有一个处于循环模式的进程速度很慢,但其他进程确实保持良好的速度。
答案 3 :(得分:1)
如果您的应用程序包含阻止其并行化的锁定,那么有许多工作进程是有意义的另一种情况。基于GDI +的图像处理就是其中一个例子。
当我尝试为my problem找到解决方案时,我找到了它。