Apache的工作模式主要有:prefork,worker和event。当然,都是多进程模式,没办法apache就是这样。其中,prefork是多进程单线程模式;worker是多进程多线程模式;event在多进程多线程方面引入了一个管理类型的线程,可以主动释放这些闲置进程。今天,我们主要说下最新的event模式的优化教程。
古哥一直用的是lamp环境,即linux+apache+mysql+php,相信大部分人用的都是lnmp,即nginx服务器。相比于nginx,apache比较费资源,主要表现在进程多,内存占用高,内存不释放等问题。
前文中,已经描述过Apache的三种模式,现在我们再列出三张框架图,让你更加清楚的看懂这三种模式的不同点:
没有疑问,我们肯定要选择event的工作模式,在终端输入如下内容(请注意,是大写的V),判断自己Apache的工作模式:
httpd -V
得到如下反馈:
Server version: Apache/2.4.46 (Unix)
Server built: Oct 25 2020 23:00:24
Server's Module Magic Number: 20120211:93
Server loaded: APR 1.7.0, APR-UTIL 1.6.1
Compiled using: APR 1.7.0, APR-UTIL 1.6.1
Architecture: 64-bit
Server MPM: event
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_PROC_PTHREAD_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/usr/local/apache"
-D SUEXEC_BIN="/usr/local/apache/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
我们找到Server MPM:,可以看到工作模式为event模式。
接下来,我们开始优化Apache的进程线程管理模块:
如果你用的是lamp一键包,那么请打开/usr/local/apache/conf目录,找到httpd.conf文件,搜索找到下面的内容:
#Include conf/extra/httpd-mpm.conf
将前面的#去掉,保存文件。
接着打开/usr/local/apache/conf/extra/httpd-mpm.conf,找到mpm_enent_module部分,修改下面的参数:
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 200
</IfModule>
主要修改了MaxConnectionsPerChild为200,可以理解为最大子线程200个,超过就自动释放进程。默认为0,即不释放子线程。所以,你会发现自己的apache占用内存越来越高。
当然,这个具体数值,要根据你的访客数量,进行调整。具体如何调整,可以参考官方文档:http://httpd.apache.org/docs/2.4/mod/event.html。
到此,优化结束!下面我们回顾下优化之前与优化之后的对比结果:
优化前:apache进程每天3点自动清理,内存降低到最小值。然后随着用户访问,内存量开始增加,不见任何减小趋势。到了晚上,基本上内存占用接近70%。再等到第二天3点自动清理。
优化后:apache进程还是每天3点自动清理,但随着用户访问,内存会增加。但是,当访问停止或者进程达到某个阈值,内存开始直接降低,并且基本上不会超过40%占用。
关于Wordrpess后台,优化apache之前,关闭后台,内存未清理;现在,关闭后台,内存立马清理。这说明,在未设置最大子线程时,内存基本没有释放的功能。好了,下面是我最近观察的内存占用情况,自行判断吧:
最后说一下,优化后主要是让apache有了内存释放机制,即最大子线程设置。
关于apache三种工作模式,这里推荐使用event模式。其他的模式,说实话,貌似也不存在这个线程管理释放的功能。而这个event模式是在2.4版本后引入的,所以,一般大家都是event模式,只需优化一下参数即可。
最后,再放一个最近改好的ssh登录终端,欢迎语,炫酷就对了。
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/858.html