IIS 7.x应用程序池最佳实践

我们即将部署一些网站到一些新的服务器。 我有关于应用程序池的以下问题:

  1. 每个网站有一个应用程序池似乎是明智的。 这个方法有什么需要注意的吗? 一个应用程序池会占用所有的CPU,内存等等吗?

  2. 什么时候应该允许应用程序池中的多个工作进程? 你什么时候不应该?

  3. 可以使用私有内存限制来防止一个应用程序池干扰另一个? 将它设置得太低会导致有效的请求来回收应用程序池而不会得到有效的响应?

  4. 私有和虚拟内存限制有什么区别?

  5. 是否有令人信服的理由不运行每个站点的一个应用程序池?

    1)build议每个网站都有一个应用程序池。 这个方法有什么需要注意的吗? 例如,一个应用程序池可以占用所有的CPU,内存等等吗?

    这是一个相当不错的方法; 有没有什么好的理由让我可以想到有不同的“网站”(应用程序)共享同一个池。 除非他们需要共享某种资源。 一个应用程序在理论上可以占用大量的CPU或内存,但改变应用程序的集合方式并不会真的影响这么多。

    2)什么时候应该允许应用程序池中的多个工作进程。 你什么时候不应该?

    使用默认设置,最好单独使用。 除非你真的知道你在做什么,这实际上会对你的网站/应用程序产生负面影响。

    3)可以使用私有内存限制来防止一个应用程序池干扰另一个应用程序池? 将它设置得太低会导致有效的请求来回收应用程序池而不会得到有效的响应?

    a)理论上

    b)是将其设定为较低会产生负面影响。 再说一遍,除非你有特定的需求,并且知道你在做什么,否则就把这些留下。

    4)私有和虚拟内存限制有什么区别?

    这是非常复杂的,这是一个快速的post,我发现可能有帮助: http : //cybernetnews.com/cybernotes-windows-memory-usage-explained/

    5)有没有令人信服的理由不运行一个应用程序池每个网站?

    再一次,我能想到的唯一原因是如果有多种应用程序需要某种“共享资源”,那么您将希望在同一个进程中运行它们。

    对于一般用途的应用程序和网站,IIS的默认值设置得相当好。

    **** ****更新

    关于您对#2的更多信息的要求,您不应该这样做,除非您有特定的需要。 即使需要花费很长时间的服务器操作,也会使用多个线程来处理请求,并且希望使用“Async Requests”来处理长时间运行的任务(释放线程池线程来处理其他请求)。 实际上,我想不出任何好的理由来允许单个池的多个进程。

    一旦你开始谈论多个进程,那么你可能会遇到如下情况:丢失会话状态,因为会话在进程1中处于活动状态,但是请求正在由进程2处理。或者更糟糕的是,您必须弄清楚如何做一些进程间的沟通,这是一个真正的痛苦。

    无论你是多个进程的原因,我都愿意打赌,有一个更好的方法来处理它(而不是启动另一个进程)。

    我总是为一个网站configuration一个专用的应用程序池。 低成本的网站托pipescheme是每个应用程序池拥有大量网站的理由。

    内存限制实际上只是原始安全阈值,以防止站点消耗所有系统资源。 请注意,这在Windows 2008 R2 x64上比在IIS 6.0 x86上更具潜在问题,因为x86应用程序具有自然的2 GB内存上限。 对于具有内存泄漏的应用程序来说,在IIS 7.5上更容易消耗大量的内存。

    我也不是回收应用程序池的粉丝。 如果我有一个应用程序池,而且我是唯一运行的应用程序,那么如果我们的代码没有问题,则可能不需要回收应用程序池。 如果在应用程序中存在缺陷,则最终适当的措施是修复代码。