开发者社区> 问答> 正文

关于“建立数据库连接时出错”的解决方法


我是小白,刚学着建站,是根据 [font=微软雅黑, 'Microsoft Yahei', 'Hiragino Sans GB', tahoma, arial, 宋体]“零基础”系列课程--如何在ECS上快递搭建一个WordPress站点一步步建成。但是后续出现了一些问题,比如打开网页的时候显示“ 建立数据库连接时出错”,因此在网上搜索了一下解决方法,不知道对不对,请路过的大神过来看看。我的网站是: 啪几网  www.pajidy.com
以前一直用虚机,这次改用了阿里云服务器,因为这个站点纯粹就是个人喜好建立的,所以主机配置比较低,单核1G,1M独立外网带宽,环境是centos6.5 64位,nginx mysql 位安装管理面板,自己对这方面也完全是白丁,整个服务器环境的搭设全部按照阿里云官方的教程进行,整体弄完后,把自己的WORDPRESS搬上去,也还算顺利。不过运行了半个多余突然出现问题。打开网页的时候显示“ 建立数据库连接时出错”,通过后台链接MYSQL发现报错无法连接,自己也不太懂,就直接重启了服务器,一切正常。不过出现这种问题心理多少有些担忧,就在后台通过看了下进程,一看发现一个php-fpm的进程有很多子进程,且占用内存非常大,很短时间1G内存空闲就只剩下不到300M,而CPU使用率却很低。
找了个在线压力测试,并发30,进行3分钟压力访问,发现内存很快就所剩无几了,直到低于90M以后突然恢复到270M空闲时,发现MYSQL的进程被KILL了。压力测试结束后,内存并没有被释放。这就是问题所在了。
通过百度查询得知,PHP-CGI会释放内存,但并不会把内存归还系统,所以当过多的PHP-FPM子进程存在时,内存就会一点点被吃干,最终导致溢出。解决方法网上貌似很多,但看起来有点天书,选了一种比较好理解易操作的方法,就是修改 php-fpm.conf文件,控制这个进程的数量。
找这个文件我就费了很大劲,网上的文章都不说这个文件在哪,对于小白来说,就有点吃力,最后找到, 这个文件在php安装文件夹心下的etc文件夹里,如果是阿里云的话,应该就是 /alidata/server/php/etc里。
打开编辑这个文件,可以通过FTP或者LINUX命令行进行修改。主要涉及几个参数。
pm 这个是设置运行方式的,分别是static(静态)或者dynamic(动态)
默认应该是在214行左右,显示为 pm = dynamic,意思就是动态方式,如果内存小,比如512M,1G,2G之类,建议使用动态。
pm.max_children:静态方式下开启的php-fpm进程数量,这个是有在pm模式为static的情况下生效。
pm.start_servers:动态方式下的起始php-fpm进程数量,这个是pm位dynamic模式下需要设置的参数,意思就是启动运行时建立的起始php-fpm进程数量
大概在230行左右,我设置后的,pm.start_servers = 3
pm.min_spare_servers:动态方式下的最小php-fpm进程数
大概位置在235行,我设置后的,pm.min_spare_servers = 3
pm.max_spare_servers:动态方式下的最大php-fpm进程数量
大概位置在240行,我设置后的,pm.max_spare_servers = 10
还有一个就是pm.max_requests,这个在百度查询都的结果就是接受多少次请求后自动重启进程的,默认是500,不知道这个数值具体是指什么的,因为重启就意味着把php占用的空闲内存释放给系统,不过一旦这个值设置的过低,可能会导致所有的php-fpm进程在几乎同时重启,而重启过程中CPU占用率会飙升,且PHP会拒绝访问请求,所以这个值不能过低,按照我这个小白理解就是宁可适当的减少运行的子进程数,也不能过分的降低这个值。不知道对不对
大概位置在251行,我设置后的,pm.max_requests = 200
这就是我设置后的几个参数,保存后重启服务,再次观察,内存占用率基本稳定在400M,缓慢增长,经过了一晚的再次进行30并发的压力测试,虽然内存和CPU同样会在此时爆发增长,但是这个并发数还是挺住了,且在压力测试结束后,内存大部分被释放给系统了。最后又在wordpress安装了wp-super-cache缓存插件,很大程度降低了访问页面时对服务器的压力。
根据百度查到的,配置php-fpm并非由固定的模式,他基本是要找到一个平衡,对于我这样的小白来说,只能一点点的试,先改成这样运行一段时间观察下,后续再做调整,毕竟自己是小白,很多东西都得摸索,短时间内也无法确定效果,慢慢试吧。
linux命令行  top命令可以查看动态的系统资源占用情况,  ps aux可以查看当时占用系统资源的情况,非动态。

展开
收起
原不周 2016-01-05 09:45:26 19148 0
5 条回答
写回答
取消 提交回答
  • Re关于“建立数据库连接时出错”的解决方法
    很感谢楼主的分享,寻找“php-fpm”可以使用命令“php-fpm -i | grep fpm*”
    2018-01-04 14:44:49
    赞同 展开评论 打赏
  • 好使
    2017-09-09 10:42:55
    赞同 展开评论 打赏
  • 回 2楼51干警网的帖子
    论坛里的教程真的很给力,我一步步按着上面的做的。后来遇到了一些问题,也顺利解决了。

    -------------------------

    回 1楼紫龙001的帖子
    格式有点乱,不是很会调
    2016-01-05 19:12:42
    赞同 展开评论 打赏
  • 阿里云论坛版主,QQ 1978638808
    给善于钻研的你,一个赞。

    -------------------------

    回 3楼(原不周) 的帖子
    教程大多是作者亲身体验的。
    2016-01-05 10:34:55
    赞同 展开评论 打赏
  • 好东西,必须支持
    2016-01-05 10:02:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载