亚马逊/阿里云 Linux Apache VPS网站服务器优化笔记

linux 下 apache启动、停止、重启命令

假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况

apahce启动命令:

/usr/local/apache2/bin/apachectl start
apache停止命令

/usr/local/apache2/bin/apachectl stop   

apache重新启动命令:

/usr/local/apache2/bin/apachectl restart 

要在重启 Apache 服务器时不中断当前的连接,则应运行:

/usr/local/sbin/apachectl graceful 

先用vi打开httpd.conf,搜索Server-pool management,可以找到如下一行:

#Server-pool management (MPM specific)
Include etc/apache22/extra/httpd-mpm.conf

可以看到httpd-mpm.conf的目录并打开httpd-mpm.conf,但里面根据httpd的工作模式分了很多块,哪一部才是当前httpd的工作模式呢?可通过执行

apachectl -l 

来查看:

  Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c

看到prefork字眼,因此可见当前httpd应该是工作在prefork模式,prefork模式的默认配置是:


StartServers 10
MinSpareServers 5
MaxSpareServers 25
ServerLimit 1500
MaxClients 1000
MaxRequestsPerChild 128

注意加上ServerLimit 1500 ,不然重启apache会出错,然后执行让修改生效:

apache停止命令

/usr/local/apache2/bin/apachectl stop
apahce启动命令:

/usr/local/apache2/bin/apachectl start  

MaxClients 要加到多少?

连接数理论上当然是支持越大越好,但要在服务器的能力范围内,这跟服务器的CPU、内存、带宽等都有关系。
查看当前的连接数可以用:

ps aux | grep httpd | wc -l

或:

pgrep httpd|wc -l

计算httpd占用内存的平均数:

ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'

假如每进程占用内存为200K。
服务器内存有2G,除去常规启动的服务大约需要500M(保守估计),还剩1.5G可用,那么理论上可以支持1.5*1024*1024*1024/200000 = 8053.06368
约8K个进程,支持2W人同时访问应该是没有问题的(能保证其中8K的人访问很快,其他的可能需要等待1、2秒才能连上,而一旦连上就会很流畅)
控制最大连接数的MaxClients ,因此可以尝试配置为:

StartServers                      5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 5500
MaxClients 5000
MaxRequestsPerChild 100

注意,MaxClients默认最大为250,若要超过这个值就要显式设置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重启httpd时会有提示。
重启httpd后,通过反复执行

pgrep httpd|wc -l 

来观察连接数,可以看到连接数在达到MaxClients的设值后不再增加,但此时访问网站也很流畅,那就不用贪心再设置更高的值了,不然以后如果网站访问突增不小心就会耗光服务器内存,可根据以后访问压力趋势及内存的占用变化再逐渐调整,直到找到一个最优的设置值。
(MaxRequestsPerChild不能设置为0,可能会导致内存泄露。

发表回复