轩枫阁

首页 / WP视点 / WP数据库连接错误 之 Apache内存优化

WP数据库连接错误 之 Apache内存优化

前几天写了篇文章:WP数据库连接错误之MySQL日志,写的主要是关于MySQL binlog导致的服务器硬盘爆满。

然而上周本站又出现了数据库连接错误的情况,也是重启无效,只好一步步进行分析,最后发现是MySQL进程会自动挂掉,重启之后首次访问正常,再次访问则提示错误。

分析

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文件

参数详解

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的模块加载数,移除不必要的模块。

参考:Apache 占用内存并发优化设置

相关文章

纸飞机许愿

x

钢琴节奏

请选择弹奏的曲谱

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 1
    • 2

    [返回曲谱列表]