zoukankan      html  css  js  c++  java
  • httpd2.4.6三种工作模式(如何配置),防止占用内存暴增的策略

    之前偷懒默认用yum安装了httpd。后来发现服务器内存暴增,一度达到75%

    打开一看,好嘛后台休眠进程全是httpd。

    重启之后再度访问发现内存还是稳步增长。

    [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工作模式的缘故。

    查看  Server MPM: prefork 确定了是运行在此工作模式下

    于是乎,先想的策略是修改prefork工作模式的配置。

    查看链接文件

    [root@iz2ze3ayxs2yps2i6b6m86z conf.modules.d]# httpd -l
    Compiled in modules:
      core.c
      mod_so.c
      http_core.c

    发现没有prefork。。

    通过
    -D HTTPD_ROOT="/etc/httpd"

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

  • 相关阅读:
    【HTML】input标签中alt属性和title属性的比较
    【HTML】WWW简介
    【MySQL】MySQL的常规操作
    iOS编程(双语版)
    Swift语言精要
    Swift语言精要
    python网络爬虫
    Python小任务
    如何在onCreate方法中获取视图的宽度和高度
    python网络爬虫
  • 原文地址:https://www.cnblogs.com/Geek-xiyang/p/10369746.html
Copyright © 2011-2022 走看看