今儿打开博客发现WordPress挂掉了,报数据库连接错误。
error establishing a database connection
what? 数据库挂了?
先检查下MySQL是否正常运行
ps -ef | grep mysql
没有起来服务,看来MySQL已经挂掉,看下错误日志。
tail -n 100 /var/log/mysqld.log
2019-04-24T03:57:26.754207Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2019-04-24T03:57:26.754219Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2019-04-24T03:57:26.754233Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2019-04-24T03:57:26.754239Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2019-04-24T03:57:26.754246Z 0 [ERROR] Failed to initialize builtin plugins.
2019-04-24T03:57:26.754251Z 0 [ERROR] Aborting
显示内存不够了。
这个server上并没有跑其他服务,难道别人攻击了?
查看php-fpm服务情况
ps -ef | grep php-fpm
果然,超过12个之多。
翻下php-fpm配置
/etc/php-fpm.d/www.conf
pm = dynamic
pm.max_children = 50
pm.min_spare_servers = 5
pm.max_spare_servers = 35
可以看到默认php-fpm进程是动态分配的,起步5个,最多50个。
那每个进程会消耗多少内存呢?
看下/etc/php.ini
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M
默认一个进程要占128M内存。
10个就超过1G内存了,这台server内存才1G,这就能解释MySQL为啥内存不够挂掉了。
OK,问题已经明白,着手调整配置。
主要是调整进程数和单个脚本内存限制。
/etc/php-fpm.d/www.conf
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 10
/etc/php.ini
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 64M
小博客暂时够用了,也没啥人看?。后期可以装个WordPress静态插件,减少后端请求。