1.为什么会有多个httpd进程?
~/WebSphere/HTTPServer/logs/httpd.pid
记录httpd守护进程的进程号。
httpd能自动复制其自身,因此系统中有多个httpd进程;
但只有一个进程为最初启动的进程,它为其他进程的父进程;
对父进程发送信号将影响所有的httpd进程;
httpd.pid定义的文件中就记录httpd父进程的进程号
2.会有多少个httpd进程?
httpd进程子进程的个数配置在http.conf的StartServers参数中:
~/WebSphere/HTTPServer/Plugins/config/httpd.conf
< IfModule worker.c>
StartServers X
</IfModule>
查询方法:
ps -ef|grep httpd|wc -l
3.httpd为什么需要多进程?
Worker
worker支持多线程和多进程混合模型的MPM;
由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器;
但是,worker也使用了多进程,每个进程又生成多个线程,以 获得基于进程服务器的稳定性;
在configure –with-mpm=worker后,进行make编译、make install安装。
在缺省生成的httpd-mpm.conf中有以下默认配置段:
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
< /IfModule>
Worker由主控制进程生成“StartServers”个子进程;
每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求;
同样, 为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;
而MaxClients 设置了同时连入的clients最大总数;
如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程;
MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250;
这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节;
ThreadsPerChild是worker MPM中与性能相关最密切的指令,ThreadsPerChild的最大缺省值是64;
如果负载较大,64也是不够的,这时要显式使用 ThreadLimit指令,它的最大缺省值是20000;
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的,应该大于等于MaxClients;
如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程;
默认最大的子进程总数是16,加大时 也需要显式声明ServerLimit(最大值是20000);
需要注意的是,如果显式声明了ServerLimit,那么它乘以 ThreadsPerChild的值必须大于等于MaxClients,
而且MaxClients必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。
4.怎样查看httpd进程和线程的详细信息?
查看进程信息:
ps -eLf |grep httpd|grep -v grep
查看线程信息:
ps -eLf |grep httpd|grep -v grep|awk '{print $4}'