博主大清早在被窝里看看手机,浏览下博客,发现 Error establishing a database connection,显然是数据库挂了= =
貌似就是作死直接LAMP的下场(linux + apache +mysql + php)
博主立刻从床上弹起来,开电脑,重起mysql,就又可以了。
那么,虽然博主最近起不来→_→今天因为这个立马爬起来,但是总不能老是出错吧!
于是开启了优化方案。。发现是由于apache内存占用太高导致mysql没内存用了 由于囊中羞涩,之前买的是512MB的digitalocean (配置 512MB RAM/1 CPU )
之前重启了下mysql,过了一会儿用top监视一下资源使用:
这么快又剩下57MB内存了!(58664K / 1024 =57MB)
必须要采取apche优化措施!
你可以先用下面的命令看看内存占用情况和进程内存占用排行:
- free -m
- ps -eo pmem,pcpu,rss,vsize,args sort -k 1 -r less
apache优化
查看Httpd工作模式
- apachectl -l
博主工作在prefork模式下
于是打开 httpd.conf ,查看配置(vim /etc/httpd/conf/httpd.conf)
这几个参数意思如下:
StartServers 8
- 启动时默认启动的进程数
MinSpareServers 5
- MinSpareServers指令设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以第一秒一个,第二秒两个,第三秒四个,按指数递增个数的速度产生新的子进程(最大32个/秒)。
MaxSpareServers 10
- MaxSpareServers指令设置空闲子进程的最大数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。
ServerLimit 256
- 配置的apache最大的并发响应数,对应的是apache的进程数
MaxClients 256
- 设定Apache可同时处理的请求数量
- MaxClients不得大于ServerLimit参数。
MaxRequestsPerChild 4000
- 每个子进程理多少个请求后将自动销毁。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束
于是我们修改为:
- StartServers 1
- MinSpareServers 1
- MaxSpareServers 5
- ServerLimit 10
- MaxClients 10
修改后,重启下apache即可
- service httpd restart
优化后
优化后: 稳定在200MB以上
博主暂时先这么优化,观察一阵子,再考虑是否进一步优化
参考资料
这个资料还有mysql优化,apache去除多于模块等:
- Configuring Apache/PHP/MySQL for Low Memory (RAM) VPS
- http://51write.github.io/2014/04/10/apache-optimal/