在 Apache Web 服务器中创建一个新进程需要多少时间

在 Apache Web 服务器中创建一个新进程需要多少时间

在我的应用程序中,我们使用 Apache 2.4 Windows Server。

下面是我的 winnt 配置

<IfModule mpm_winnt_module>
    ThreadsPerChild        1900
    MaxConnectionsPerChild 8000
</IfModule>

根据上述配置,每8000个请求,服务器就会创建一个新进程。

我的应用程序中每天都会有 500000 个事务。MaxConnectionsPerChild 的值是多少才能提供良好的性能。

以下是我的问题:

1. How much time its required for creating a New Process?
2. While creating the new process, If any requests comes to web server will it accept or not?
3. If the request hit reached 8000, will it drop all the current processing request or the  request will move to new process.
4. If the request hit reached 8000,  If any requests comes to web server will it accept or not?
5. Winnt module have only one process, so its good or bad to keep non zero values in MaxConnectionsPerChild ?

我没有在网上找到上述问题的答案。有人能帮我澄清一下吗?

任何帮助将不胜感激!!!

答案1

简短的回答是:

  • 由于 winnt MPM 仅使用一个进程来生成线程,因此考虑使用每个子线程数指示。
  • 对于您的服务器,请离开每个子节点的最大连接数指令设置为 0(默认值):没有连接限制,因此线程生成过程不会终止。

更多信息来自winnt MPM 的 Apache 文档。

ThreadsPerChild 指令-:

此指令设置每个子进程创建的线程数。子进程在启动时创建这些线程,并且永远不会创建更多线程。如果使用 mpm_winnt 之类的 MPM,其中只有一个子进程,这个数字应该足够高,以处理服务器的整个负载在高峰时段,为应对异常需求做好一些应急准备。

  1. 创建新流程需要多少时间?

取决于,例如,调度了哪些进程,可能发生哪些中断,有哪些系统资源可用于管理进程。但是,Windows 进程创建成本很高。

  1. 在创建新进程时,如果有任何请求到达 Web 服务器,它会接受吗?

它不会接受。子进程在启动时会创建用于处理请求的线程。

  1. 如果请求命中率达到 8000,它会丢弃所有当前处理的请求还是将请求转移到新流程?

都不是:请求不会移动到新进程,并且在活动请求终止之前有一个 TimeOut 秒的宽限期。

  1. 如果请求数达到 8000,那么如果有任何请求到达 Web 服务器,它会接受吗?

在子进程启动所有工作线程之前,不会接受请求。

  1. Winnt 模块只有一个进程,所以保留非零值是好还是坏?

根据服务器遇到的负载,保持每个子节点的最大连接数指令设置为 0(默认值)。

MaxConnectionsPerChild 指令设置单个子服务器进程将处理的连接数限制。在 MaxConnectionsPerChild 个连接之后,子进程将终止。如果 MaxConnectionsPerChild 为 0,则该进程将永不终止。

相关内容