0.
我站出现“Error establishing a database connection”这个问题很久了,一直也没有解决,每次重启一下就好了,一开始以为是JetPack插件的锅,因为他需要在一个网页授权什么东西,由于是wordpress出品,于是就信任了,后来不断出现这个error,推测是Jetpack的问题,遂卸载,结果症状好了一点,但还是出error,只不过频率低了。
1. Debug过程
首先Google了一下这个error,大多数都是说MySQL用户名和密码不对的,确认一遍用户名密码。
其中有一条说尝试登陆一下MySQL看一下error日志,结果登不上,继续Google MySQL登不上的问题,手动起动无效,lnmp下重启无效,尝试重启大法(整机),结果又能登陆了,可以初步确定问题出在MySQL。
后来又搜到说是不是内存不够了,键入
free -m 查看内存使用情况,发现剩余内存很多(刚重启过),暂停。
过了几天又出现error,在查看内存使用,剩余只有几十MB,当然跑不起来(但是为什么是MySQL先挂掉了而不是别的服务),搜了一招增大swap的方法缓解内存不足,实践后没什么明显效果,见上一篇文章 。
继续探索,这次使用了
top 命令查看资源使用情况,跟Windows下的任务管理器差不多,按
shift+P 按CPU使用排序,按
shift+M 按内存使用排序,如图:
其中:
PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进 程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称
终于破案了!可以看到世界上最好的语言 的14个进程吃掉了70%+的内存!
可能世界上最好的语言只有世界上最好的服务器才配得上吧
2. 配置优化
既然定位到了问题就好办了,Google一下,修改配置文件php-fpm.conf,把
pm = dynamic 改为
pm = ondemand ,然后重启php就好了,重新看一下内存使用情况:
剩余内存从42MB增到了633MB,立竿见影~
参考:https://segmentfault.com/a/1190000010413463