Apache服务器工作模式内存优化策略

4.6
(8)

Apache的工作模式主要有:prefork,worker和event。当然,都是多进程模式,没办法apache就是这样。其中,prefork是多进程单线程模式;worker是多进程多线程模式;event在多进程多线程方面引入了一个管理类型的线程,可以主动释放这些闲置进程。今天,我们主要说下最新的event模式的优化教程。

Apache服务器工作模式内存优化策略

古哥一直用的是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登录终端,欢迎语,炫酷就对了。

Apache服务器工作模式内存优化策略

共计8人评分,平均4.6

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

原创文章,作者:古哥,如若转载,请注明出处:https://iymark.com/website/apache-mode-event-optimize.html

发表评论

登录后才能评论
分享本页
返回顶部