httpd2.4.6三種工做模式(如何配置),防止佔用內存暴增的策略

以前偷懶默認用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

而後在官網找2.4文檔時發現2.3起新特性默認動態加載。

目前的情況已經再也不支持本地修改三種工做模式的配置。

三種不一樣的mpm模式:

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了 終止

相關文章
相關標籤/搜索