代码之家  ›  专栏  ›  技术社区  ›  Tim Long

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

  •  59
  • Tim Long  · 技术社区  · 15 年前

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

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

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

    4 回复  |  直到 8 年前
        1
  •  54
  •   ChrisLively    15 年前

    工作进程是一种跨多个exe对网站执行进行分段的方法。您这样做的原因有两个,一个是如果其中一个工作人员被运行时问题击倒,它不会使其他人失望。例如,如果一个HTML请求进入,导致进程运行为空,那么只有一个工作处理器处理的其他请求会被杀死。另一个例子是,一个请求可能导致阻塞同一个工作线程处理的其他线程。

    就你需要多少,做一些负载测试。用力点击应用程序,看看只有一个会发生什么。然后再添加一些,然后再次点击。在某个时刻,您将到达一个真正饱和机器网络、磁盘、CPU和RAM的时刻。这时你才知道你有了正确的平衡。

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

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

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

        2
  •  4
  •   Bryan    15 年前
        3
  •  4
  •   Akash Kava    11 年前

    内存渗漏体

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

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

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

        4
  •  1
  •   Community CDub    8 年前

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

    当我试图为 my problem .