确定允许一个ASP.NET Web应用程序使用多少工作进程的最佳实践是什么?
在我管理的一台服务器上,创建一个新的AppPool默认为10个(最大)工作进程。其他人建议正常设置为1。
多个工作进程解决了什么问题,决定多少个工作进程的技术是什么?
确定允许一个ASP.NET Web应用程序使用多少工作进程的最佳实践是什么?
在我管理的一台服务器上,创建一个新的AppPool默认为10个(最大)工作进程。其他人建议正常设置为1。
多个工作进程解决了什么问题,决定多少个工作进程的技术是什么?
Answers:
辅助进程是一种将您的网站的执行跨多个exe进行细分的方法。您这样做有两个原因,一个是如果其中一个工人因运行时问题而瘫痪,那么其他工人就不会失望。例如,如果一个html请求进入,导致该进程没有任何结果,则只有一个工作处理器正在处理的其他请求被杀死。另一个示例是,一个请求可能导致阻塞同一工作人员处理的其他线程。
根据需要的数量,进行一些负载测试。用力地打应用程序,看看只有一个会发生什么。然后再添加一些,然后再次点击。在某个时候,您将达到真正使机器网络,磁盘,cpu和ram饱和的程度。那就是当您知道自己拥有适当的平衡时。
顺便说一句,您可以通过machine.config文件控制每个工作进程使用的线程数。我相信关键是maxWorkerThreads。
现在,请注意,如果您使用会话,则工作进程之间不会共享会话状态。我通常建议无论如何都避免会议,但这是需要考虑的事情。
出于所有目的和目的,您可能会考虑将每个工作进程视为自己的独立Web服务器。除了它们在同一个盒子上运行。
内存泄漏
另一个最大的优点是处理内存泄漏。有时您会尝试优化代码多少,但是框架本身和其他第三方库中存在内存泄漏。我们注意到,最终我们的应用程序达到了很高的内存,并开始不提供任何内存异常。
因此,我们必须将工作进程的最大虚拟内存限制设置为1GB,并允许多个进程运行。您甚至可以为单个工作进程设置最大虚拟限制,但这会导致速度下降的尖峰,因为在回收工作进程时,所有请求都是缓慢的,直到工作进程获得良好的速度为止。由于我们的应用程序具有内部缓存(实体框架查询缓存,一些对象池),因此每件事都会减慢应用程序的启动速度。这是单人工作流程受害最大的地方。
如果有多个工作进程,则只有一个处于循环模式的进程很慢,而其他进程的运行速度却不错。