69

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

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

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

4

3 回答 3

65

工作进程是一种跨多个 exe 分割网站执行的方法。您这样做有几个原因,一个原因是,如果其中一名工作人员因运行时问题而受到重创,它不会让其他工作人员失望。例如,如果一个 html 请求进入,导致进程停止运行,那么只有该一个工作处理器正在处理的其他请求被杀死。另一个示例是,一个请求可能会导致对同一工作人员处理的其他线程的阻塞。

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

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

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

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

于 2010-01-28T00:15:23.750 回答
6

内存泄漏

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

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

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

于 2014-03-31T06:51:21.743 回答
3

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

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

于 2017-01-02T19:53:29.903 回答