产生HTTPD进程

任何可以确认Apache如何产生新的孩子?

如果我连接到一个networking服务器(HTTP 1.0 /不保持活动),并发出一个HTTP / GET,我会产生一个新的HTTPD子。 如果然后发出另一个HTTP / GET,那么将build立一个新的TCP连接。 但是,我会使用相同的subprocess,我会产生一个新的?

另外,如果我使用HTTP 1.1(保持活动状态)并重用相同的TCP连接,如果我不使用keepalivehttpd进程/产卵会有什么不同?

谢谢,

如果我连接到一个networking服务器(HTTP 1.0 /不保持活动),并发出一个HTTP / GET我会产生一个新的HTTPD子

不,为了完成TCP握手,你已经有了一个处理你的请求的过程。 既然你提到'进程',这意味着你正在谈论前叉MPM。 在这种情况下,服务器应该已经有一个可用的subprocess池 – 其中一个获得一个互斥体来获取下一个进入的连接。

基于线程的服务器以类似的方式工作。

基于事件的服务器是一个完全不同的水壶,并不会产生线程/进程。

如果然后发出另一个HTTP / GET …。我将使用相同的subprocess

不可以。即使你知道你有一个保持连接的连接,服务器也没有保留状态 – 所以你必须把它看作是一个新的进程。

没有通用的设置,因为这是HTTP服务器性能最关键的方面。 一般来说,Apache会尽量避免分叉(或产卵,就像你所说的那样)。 看一下这个:

http://www.stepwise.hk/blog/check-if-apache-running-prefork-or-worker/

多处理模块(MPM)是pipe理networking连接和调度请求的Apache模块。 有两种常见的MPM可用于Apache2,即mpm_prefork_module和mpm_worker_module。 mpm_prefork_module使用每个请求的一个进程的传统模型,而mpm_worker_module使用使用多个进程的线程模型,每个进程使用多个线程,以较低的开销获得更好的性能。

Apache 2.4手册说:

在构buildApache时,您必须select一个MPM来使用。 对于某些平台,有特定于平台的MPM:mpm_netware,mpmt_os2和mpm_winnt [适用于任何MS Windows版本]。 对于一般的Unix型系统,有几个MPM可供select。 MPM的select会影响httpd的速度和可伸缩性:

  • 工作者 MPM使用多个subprocess,每个subprocess都有多个线程。 每个线程一次处理一个连接。 对于高stream量的服务器来说,工作者通常是一个不错的select,因为它的内存占用量比prefork MPM要小。
  • 事件 MPM像Worker MPM一样被线程化,但是被devise为允许通过将一些处理工作交给支持线程来同时提供更多的请求,从而释放主线程以处理新的请求。
  • prefork MPM使用多个subprocess,每个进程有一个线程。 每个进程一次处理一个连接。