http://blog.csdn.net/marcolu/archive/2004/08/02/59085.aspx
常用的应该就只有3个:worker|prefork|perchild
1. prefork:在功能上就是使用 Apache的运行方式,一个父进程,然后根据设置以及连接情况生成相应的子进程数。这种模式可靠性和健壮性都是最好的。但是在性能上,开销过大。达不到我们这些“吸血鬼”的要求了^_^。如果连接数过多的话,会导致我们无法远程登陆,一定要等到连接数下降后才能连接,这也是最让我头痛的事情。
2. worker:混合线程/进程的MPM。一个父进程,后面是带有线程的子进程。每个子进程的线程数是固定且相同的。这是最“平庸”的一个模式,但也是使用人最多的一种模式。因为它性能等各方面比较均衡。性能上要比prefork好一些,只是牺牲了一点点的健壮性和可靠性而已。一般推荐使用这个选项。
3. perchild:也是混合线程/进程的MPM。当启动perchild MPM时,它会建立指定数量的子进程,且每个子进程都具有指定数量的线程,如负载增加了,那它不会建立新的进程(子进程是固定的),只是在子进程下建立新的线程。它还有一个特点就是可以为每一个子进程配置不同的用户和组。也可以为每个虚拟主机指定一个子进程。这种模式性能是最佳的,但是可靠性和健壮性就相对是最差的。各取所需,我个人觉得这种模式也不错,如果你不用第三方的模块的话^_^。
http://blog.csdn.net/tingya/archive/2006/08/09/1040799.aspx
http://blog.csdn.net/tingya/archive/2006/08/28/1133825.aspx
http://blog.csdn.net/tingya/archive/2006/08/28/1133836.aspx
Apache中预创建Preforking MPM 机制剖析
http://ldgliguang.blog.163.com/blog/static/81845820074101133992/
在这里看到这样的描述:
将MaxRequestsPerChild设置成非零值有两个好处:
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
http://blog.codingnow.com/2007/05/good_design.html
又在这里看到,《Unix痛恨者手册》上有一句话。
“通过控制进程的产生与终止来进行内存管理,这就如同通过控制人的生死来对付疾病”
预先派生模型有一些优点,例如健壮性以及可靠性。如果子进程异常退出,那么服务器就会丢失一个连接,而且仅仅丢失一个连接。服务器的其余部分还将继续运行,并且可以为请求提供服务。唯一可以注意到问题出现的用户就是不幸地进行了导致问题地请求的用户。
不过预派生模型也有自己的缺点,比如扩充性。
这种设计的最后问题就是它会消弱某些优化。因为每个请求都会在它自己的进程中运行,所以进程之间很难共享任何信息。
http://archive.netbsd.se/?ml=apache-httpd-dev&a=2004-02&t=44730
hmmm, looks like the httpd parent is trying to shut down a child process gracefully after a decrease in traffic.
write(6, "!", 1) means it's using the pipe of death. Since waitpid() is returning 0, it looks the child processes aren't responding to the pipe of death. Could it be that network traffic is totally dried up during these periods? or could the child processes be in the middle of some long running request?
Could it be that network traffic is totally dried up during these periods? or could the child processes be in the middle of some long running request?
从这两句来看,似乎 parent write(6, "!", 1) 之后, child 需要等到有一个请求之后才会知道这个消息。child 在 idle 的时候,应该处在:
accept_mutex_on();
accept();
accept_mutex_off();
被阻塞在 accept ,这个时候尽管 parent 写 pod ,但是不能把 child 从 accept 中唤醒过来。
http://www.webmonkey.com/webmonkey/97/49/index3a_page4.html?tw=backend
This effectively locks those children into serving requests from that one socket and no other sockets, and they'll be stuck there until enough new requests appear on that socket to wake them all up.
分享到:
相关推荐
### Apache Prefork、Worker 和 Event 三种 MPM 的详解 #### 一、Prefork MPM **Prefork MPM** 是 Apache 提供的一种多处理模块(MPM),它实现了非线程化的、预分叉的 Web 服务器架构,类似于 Apache 1.3 的工作...
apache2-prefork 64位快速安装包
Linux 下apache2-prefork-2.2.22-i586.rpm 快速安装包
Apache 提供了两种主要的 MPM:prefork 和 worker,它们各自有不同的工作原理和适用场景。 **prefork 模式** prefork 模式是一种非线程的、预派生的服务器模型,适用于那些没有线程安全库或需要避免线程兼容性问题...
例如,对于单CPU系统,Prefork MPM可能是个好选择,而对于多核系统,Worker或Event MPM可能会更合适。 9. **故障排查** 如果遇到问题,查看错误日志(通常位于"logs"目录下的"error.log")会很有帮助。Apache也...
1. **配置文件**:Apache服务器的配置主要通过httpd.conf文件进行,这个文件包含了关于服务器运行的所有设置,如端口号、虚拟主机、文档根目录、访问控制等。在Apache22目录下,你可以找到这个文件以及其他的配置...
在prefork模式下,Apache服务器的连接并发数取决于httpd进程数,即StartServers、MinSpareServers、MaxSpareServers、ServerLimit、MaxClients和MaxRequestsPerChild等配置参数的设置。 在prefork模式下,Apache...
2. **请求处理**:当一个HTTP请求到达时,Apache服务器会通过多路复用(比如`prefork`或`worker`模型)分配给一个进程或线程来处理。这部分源代码会解释如何解析请求头,如何路由请求到正确的虚拟主机,以及如何执行...
3. 多线程支持:引入了MPM(Multi-Processing Modules)多进程模型,如worker MPM和prefork MPM,提高了并发处理能力。 4. 更好的性能:通过优化内存管理和请求处理流程,Apache 2.2在处理高并发请求时表现更佳。 5....
- **工作原理**:Prefork MPM 是 Apache 2.0 中 Unix 平台上的默认 MPM。它继承了 Apache 1.3 的预派生子进程的方式,没有使用线程。这种方式确保了进程之间的独立性,提高了系统的稳定性。 - **配置参数**: - `...
Apache 中配置最大并发用户数 TCP 连接设置 Apache 是一个功能强大且灵活的 Web 服务器,可以根据不同的需求进行配置和优化。本文主要介绍如何配置 Apache 的最大并发用户数和 TCP 连接设置,以提高 Web 服务器的...
在2.4版本中,Apache引入了新的事件处理模型,与传统的预读取(prefork)模型相比,它能更有效地处理高并发连接。事件模型利用了epoll(Linux)或kqueue(FreeBSD)等系统调用来优化性能,减少了CPU占用,提高了...
以下是一些关于Apache2.4的关键知识点: 1. **模块化设计**:Apache2.4的核心采用模块化设计,允许用户根据需要加载或卸载功能模块。例如,mod_rewrite用于URL重写,mod_security用于Web应用防护,mod_deflate用于...
### Linux离线安装Apache知识点...以上就是关于Linux环境下离线安装Apache服务器的详细步骤和注意事项。通过遵循这些步骤,用户可以在没有互联网连接的情况下成功安装并配置Apache服务器,从而实现网站的搭建和管理。
2. **线程模型**:Apache2支持两种多进程模型,即传统的预生成(prefork)模型和更高效的多线程(worker)模型。预生成模型适用于内存有限的环境,而多线程模型则在需要处理大量并发连接时表现更优。 3. **配置灵活...
- **MPM(多进程模块)**:Apache 2.4支持多种MPM,如`prefork`、`worker`和`event`,分别对应于不同的进程/线程模型,以适应不同的服务器负载需求。 - **HTTP/2支持**:相比于HTTP/1.1,HTTP/2提供了更高效的连接...
本文将详细讨论Apache中的线程模式,包括`prefork`和`worker`两种主要的多进程模块(MPM)。 首先,`prefork`模式是Apache的默认MPM,它采用预派生子进程的方式来处理HTTP请求。每个请求由一个单独的子进程处理,...
2. **多线程支持**:Apache 2.0引入了多线程模型,如Prefork和Worker模型,以提高性能和并发处理能力。Prefork模型适用于内存有限的环境,而Worker模型利用了多线程和异步I/O来优化高并发场景。 3. **虚拟主机**:...