0%

apache 在低配置服务器下的优化

博主大清早在被窝里看看手机,浏览下博客,发现 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)optimizing-apache-for-low-memory-ram-vps-top-apache-use

必须要采取apche优化措施!

你可以先用下面的命令看看内存占用情况和进程内存占用排行:

  • free -m
  • ps -eo pmem,pcpu,rss,vsize,args sort -k 1 -r less

 

apache优化

查看Httpd工作模式

  • apachectl -l

博主工作在prefork模式下

apache-word-on-prefork
apache-word-on-prefork

于是打开 httpd.conf ,查看配置(vim /etc/httpd/conf/httpd.conf)

apache-prefork-configuration
apache-prefork-configuration

这几个参数意思如下:

  • 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以上

optimizing-apache-for-low-memory-ram-vps-top-apache-use-optimized
optimizing-apache-for-low-memory-ram-vps-top-apache-use-optimized

博主暂时先这么优化,观察一阵子,再考虑是否进一步优化

参考资料

这个资料还有mysql优化,apache去除多于模块等:

请我喝杯咖啡吧~