操作系统版本:Red Hat Enterprise Linux release 8.7 (Ootpa)
Apache的版本:httpd-2.4.37-56.module+el8.8.0+19808+379766d6.7.x86_64
1、编辑配置文件 /etc/httpd/conf.modules.d/00-mpm.conf ,保证3种MPM,只启用prefork
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so #LoadModule mpm_worker_module modules/mod_mpm_worker.so #LoadModule mpm_event_module modules/mod_mpm_event.so
对于httpd-2.4版本,默认是使用的event
2、基本配置 /etc/httpd/conf/httpd.conf,添加如下配置,不添加也会有默认值
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 256 MaxConnectionsPerChild 0 </IfModule>
以上的配置就是配置的默认值的,其中部分选项说明如下:
MinSpareServers
If you are trying to set the value equal to or lower than MinSpareServers, Apache HTTP Server will automatically adjust it to MinSpareServers + 1
MaxRequestWorkers
For non-threaded servers (i.e., prefork), MaxRequestWorkers translates into the maximum number of child processes that will be launched to serve requests. The default value is 256; to increase it, you must also raise ServerLimit.
MaxConnectionsPerChild
The MaxConnectionsPerChild directive sets the limit on the number of connections that an individual child server process will handle. After MaxConnectionsPerChild connections, the child process will die. If MaxConnectionsPerChild is 0, then the process will never expire. Setting MaxConnectionsPerChild to a non-zero value limits the amount of memory that a process can consume by (accidental) memory leakage.
遗留的问题:在官网可以看到有说明 prefork
prefork 这个多处理模块(MPM)实现了一个无线程、prefork的web服务器。每个服务器进程可以回答传入的请求,父进程管理服务器池的大小。
它适用于需要避免线程化以与非线程安全库兼容的站点。它也是隔离每个请求的最佳MPM,这样单个请求的问题就不会影响任何其他请求。
但笔者,通过 ps命令, 发现其子进程,是有多个线程的
[root@qq-5201351 ~]# httpd -V | grep MPM Server MPM: prefork [root@qq-5201351 ~]# ps -eLf|grep httpd root 17746 1 17746 0 1 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17747 0 22 11:14 ? 00:00:07 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17749 0 22 11:14 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17750 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17751 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17752 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17753 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17754 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17755 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17756 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17757 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17758 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17759 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17760 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17761 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17762 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17764 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17765 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17766 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17767 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17768 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17769 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17747 17746 17770 0 22 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17748 17746 17748 0 6 11:14 ? 00:00:07 /usr/sbin/httpd -DFOREGROUND apache 17748 17746 17763 0 6 11:14 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND apache 17748 17746 17771 0 6 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17748 17746 17772 0 6 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17748 17746 17773 0 6 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 17748 17746 17774 0 6 11:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND root 36550 36381 36550 0 1 14:07 pts/1 00:00:00 grep --color=auto httpd [root@qq-5201351 ~]#
不知道如何理解这种情况,网上有一说法,是真正处理http请求的只有一个线程,其他线程是被其他模块所使用了,也希望有知道原因的大佬能帮忙解疑一下,在此感谢~
尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17771946.html
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
由于博主的水平不高,文章没有高度、深度和广度,只是凑字数,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!