有谁能证实Apache是如何培育出新的孩子的?
就像我连接到new服务器(HTTP1.0/ no,保持活动)并发出HTTPD /GET一样,我将生成一个新的HTTPD子节点。如果然后发出另一个/GET,那么将建立一个新的TCP连接。然而,我会使用相同的子进程,我会产生一个新的吗?
谢谢,
发布于 2012-11-23 12:08:53
如果我连接到一个new服务器(HTTP1.0/ no,保持活动)并发出HTTPD /GET,那么我将生成一个新的HTTPD子节点。
不,要完成TCP握手,您已经有了一个处理请求的进程。因为你提到了‘进程’,这意味着你在谈论的是前叉MPM。在这种情况下,服务器应该已经有一个可用子进程池-其中一个进程获得一个互斥以获取下一个传入连接。
基于线程的服务器以类似的方式工作。
基于事件的服务器是一个完全不同的鱼缸,不产生线程/进程。
如果然后发出另一个HTTP,我将使用相同的子进程
不是的。即使您知道您有一个保持活动的连接,服务器也没有保留任何状态--因此您必须把它当作一个新进程来处理。
发布于 2012-11-23 10:39:19
没有通用设置,因为这是http服务器性能中最关键的方面。通常,Apache会尽力避免分叉(或者像您所称的那样产生分叉)。看看这个:
http://www.stepwise.hk/blog/check-if-apache-running-prefork-or-worker/
多处理模块(MPM)是管理网络连接和发送请求的Apache模块.Apache2有两种常见的MPM,即mpm_prefork_module和mpm_worker_module。mpm_prefork_module使用每个请求一个进程的传统模型,而mpm_worker_module使用线程模型,它使用多个进程,每个进程都有多个线程,以获得更好的性能和更低的开销。
Apache 2.4的手册说:
构建Apache时,必须选择要使用的MPM。有些平台有特定于平台的MPM: mpm_netware、mpmt_os2和mpm_温特 适用于任何版本.对于一般的Unix类型系统,有几个MPM可供选择。MPM的选择会影响httpd的速度和可伸缩性:
https://serverfault.com/questions/451483
复制相似问题