centos7下假设apache2.4的web服务器,经常出现内存跑满的情况,导致网站访问缓慢,开始以为是mysql的锅,以为是修改引擎模式所致。后来通过top命令查看到原来是apache的进程跑满内存了。
通过查阅资料,发现可以通过对apache的MPM模式下的event参数修改来对内存占用进行优化。
但在我的实践中,其实还可以更简单的操作。步骤如下:
1、检查Apache安装使用的MPM模式,操作命令:
# httpd -V
在输出结果中查看Server MPM:条目即可,Apache提供prefork、worker、event三种不同的MPM模式,目前最新版默认选择event。通过编辑/etc/httpd/conf.modules.d/00-mpm.conf配置文件可以在三个模式之间切换。
2、复制event配置文件
MPM模式的配置文件要生效需要复制到/etc/httpd/conf.d目录下:
cp /usr/share/doc/httpd-2.4.48/httpd-mpm.conf /etc/httpd/conf.d
3、修改event的参数
然后,可以根据自己服务器及网站的需求,对event模式的参数进行修改,如编辑配置文件:
vim /etc/httpd/conf.d/httpd-mpm.conf
<IfModule mpm_event_module>
StartServers 3 #默认启动进程数
MinSpareThreads 75 #最小线程
MaxSpareThreads 250 #最大线程
ThreadsPerChild 25 #最大子线程数
MaxRequestWorkers 400 #最大请求数量
MaxConnectionsPerChild 200 #最大连接次数,超过后释放线程
</IfModule>
主要将MaxConnectionsPerChild参数值由0改为200。目的用于控制子进程的最大连接数,超过就自动释放。
service httpd reload
这样,在重新加载apache并使event模式默认参数生效后,apache占用内存的情况就已经大为改观了。这时候再访问网站前后台,就不会再有卡顿的问题了。
服务器内存占用优化效果见下图:
这是两台机子优化内存前后的对比图。
4、关于event模式的更多参数及说明,可以查看官方文档:http://httpd.apache.org/docs/2.4/mod/event.html。