最新公告
  • 欢迎您光临仿站吧 帝国CMS模板一站式建站供应平台 . 欢迎加入VIP
  • wordpress数据库连接错误 Apache内存优化

    正文概述 仿站吧   2021-12-30 00:34:24  

    1. 查看日志

    tail /var/log/messages

    tail /alidata/log/mysql/error.log

    Out of memory: Kill process 19359 (mysqld)

    结论mysqld的进程自动被kill,导致数据库shutdown无法访问,但是Apache服务正常,原因是可用内存不足。

    2. 是否MySQL占用内存过高?

    查看MySQL配置项 innodb_buffer_pool_size:view /etc/my.cnf

    只有64M,并不会占用太高的内存,所以是其它进程占用内存过高。

    3. 什么进程很占用内存?

    查看系统运行状态:top

    按照内存占用排序:shift+m

    可以看到上图中,运行着很多个httpd进程(即Apache),虽然平均占用只有2%,但是有大约30个就已经耗费系统60%的内存,而系统本身运行也需要内存。

    服务器2G内存的配置,只剩下约75M可用,直接导致MySQL进程自动被kill。

    4. 如何解决?

    Apache开启的进程过多,其实不需要开启那么多,需要进行优化。

    优化

    1. 查看当前Apache配置及运行情况

    查看Apache运行模式:httpd -l

    当前Apache连接数:ps aux | grep httpd | wc -l

    计算httpd占用内存平均数:ps aux | grep -v grep |awk '/httpd/{sum += $6;n++};END{print sum/n}'

    当前的运行模式是 prefork 模式,32个进程,平均约17M。

    2. 查找Apache配置 httpd.conf

    查看Apache路径:whereis httpd

    查找配置文件:vim /etc/httpd/conf/httpd.conf

    或者:find / -name httpd.conf

    本站配置

    • 操作系统:CentOS 7.2 64位
    • CPU:1核
    • 内存:2GB
    • Apache:2.4.10

    3. 关于prefork模式及配置

    prefork是Apache是linux默认安装使用的模式,而prefork是多进程处理的,每个进程都使用一定内存。

    所以限制httpd进程的数量,即可达到优化Apache占用内存的目的。

    修改httpd.conf文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Timeout 30
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 4
    <IfModule prefork.c>
    StartServers 5
    MinSpareServers 5
    MaxSpareServers 10
    ServerLimit 5500
    MaxClients 5000
    MaxRequestsPerChild 100
    </IfModule>

    参数详解

    Timeout:单个连接多长时间后断开,一般值30-60

    KeepAlive:on | off ,值为on时,用户在发起HTTP请求后,Apache不会立刻关闭此连接,等待KeepAliveTimeout时间后关闭

    MaxKeepAliveRequests:一个连接的最大请求量,当页面中含较多图片时,可适当调高,一般值80-120

    KeepAliveTimeout:当处理用户的一次连接,如果在该时间内还有请求则继续执行,无需创建新连接,直到达到MaxKeepAliveRequests最大值时退出。

    以上为可能影响Apache性能的配置,以下为prefork参数设置,前面3个参数决定空闲进程数量

    StartServers:启动时默认启动的进程数

    MinSpareServers:设置空闲子进程的最小数量。空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以第一秒一个,第二秒两个,第三秒四个,按指数递增个数的速度产生新的子进程

    MaxSpareServers:置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。

    ServerLimit:Apache最大并发响应数,即最大支持同时连接的客户端数

    MaxClients:设定Apache可同时处理的请求数量,MaxClients不得大于ServerLimit参数

    MaxRequestsPerChild:每个子进程理多少个请求后将自动销毁。到达MaxRequestsPerChild的限制后,子进程将会结束

    各参数设置可以参考以上值,根据服务器配置做相应调整。

    4. 重启Apache

    service httpd restart

    优化后

    查看内存占用情况:free -m

    网站访问恢复正常,除了以上配置,还可以修改Apache的模块加载数,移除不必要的模块。

    仿站吧,一个优质的源码资源平台!
    仿站吧 » wordpress数据库连接错误 Apache内存优化