以前偷懶默認用yum安裝了httpd。後來發現服務器內存暴增,一度達到75%php
打開一看,好嘛後臺休眠進程全是httpd。html
重啓以後再度訪問發現內存仍是穩步增加。linux
[root@iz2ze3ayxs2yps2i6b6m86z ~]# httpd -V Server version: Apache/2.4.6 (CentOS) Server built: Nov 5 2018 01:47:09 Server's Module Magic Number: 20120211:24 Server loaded: APR 1.4.8, APR-UTIL 1.5.2 Compiled using: APR 1.4.8, APR-UTIL 1.5.2 Architecture: 64-bit Server MPM: prefork threaded: no 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_SYSVSEM_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="/etc/httpd" -D SUEXEC_BIN="/usr/sbin/suexec" -D DEFAULT_PIDLOG="/run/httpd/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"
進一步瞭解發現是prefork工做模式的緣故。nginx
查看 Server MPM: prefork 肯定了是運行在此工做模式下apache
因而乎,先想的策略是修改prefork工做模式的配置。服務器
查看連接文件app
[root@iz2ze3ayxs2yps2i6b6m86z conf.modules.d]# httpd -l Compiled in modules: core.c mod_so.c http_core.c
發現沒有prefork。。ui
經過
-D HTTPD_ROOT="/etc/httpd"spa
-D SERVER_CONFIG_FILE="conf/httpd.conf"線程
肯定了配置文件位置
查看配置文件發現 Include conf.modules.d/*.conf 繼續追蹤發現 00-mpm.conf中
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
目前的情況已經再也不支持本地修改三種工做模式的配置。
1prefork模式
經過fork進程來處理鏈接隊列。較爲佔用內存
2.worker模式
採用進程和線程的混合模式。缺點在於
3.event模式
worker模式的改進版,解決了保活問題,須要linux支持epoll。
文檔連接:http://httpd.apache.org/docs/2.4/mpm.html
也能夠本身下一個完整的包,編譯以前配置好。而後重啓服務器便可。
因爲2.3之後,event模式已經全面支持,因此能夠採用此模式來解決問題。
00-mpm.conf中
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
改成
LoadModule mpm_prefork_module modules/mod_mpm_event.so
而後重啓服務器便可
注意 event模式須要較高版本的php
投奔nginx了 終止