Apache优化步骤

  
  
  
  
  1. Apache优化步骤: 
  2. 1、先查看apache的运行模式,查看命令: 
  3. httpd -l 
  4.  
  5. Compiled in modules: 
  6.            core.c 
  7.            prefork.c 
  8.            http_core.c 
  9.            mod_so.c 
  10.         这里可以看到运行模式是prefork模式。 
  11. 2、修改apache 的httpd.conf 配置 
  12.  
  13. 本文是对512M 内存并装有apache的vps进行优化,请不要跟我说装nginx就强多了,确实如此,但是你这样说的话,这篇文章就没什么意义了,哈哈。那么进入正题吧! 
  14. 操作系统(linux):CentOS 5.5 32位(并不是我说这个比较好,只是Cents我用得比较熟练) 
  15.     内存:512M 
  16.     cpu:1G(1000MHz,vps实际有没有这个数,很难说) 
  17.     apache:2.2(建议低版本的,升级到高版本,毕竟旧版有很多问题,且性能也是高版本好点) 
  18. 运行的主要是PHP程序,其他的不多说了,与本文关系不大。 
  19. 首先,如题所说,本文所说的优化是针对apache 2.2以上版本,及使用perfork MPM模式的。perfork是apache在linux下默认安装下的模式,如果使用apache作为服务器的放在,还是使用perfork模式比较好,worker模式下对php某些功能并不支持。如果你使用的是win系统或都没有使有和perfork,那么下面可以选择不看或抱着学习的态度看看咯。 
  20. 以下内容均属于博主自己的见解,实际测试请根据你的服务器,程序及其他因素按需处理。 
  21. 一般情况下,我们需要优化apache就是因为apache占用大量的内存,导致vps当机,因为perfork是多进程处理的,每个进程都会点用一定的内存数量。所以限制httpd进程的数量,从而达到优化apache的作用。影响单个httpd进程的内存大小,主要都是加载模块,至少什么模块是合适的,我也很难说,因为这个是按由你的需要而定的。网上有些人说,绝大部分都会用不上的模块列出来,我认为这个是有很大的误导作用,因为绝大部分人中,也许你就是其中一个。将有用的模块屏蔽掉,最坏的情况,就是重启apache出错,或部分功能无法使用。所以我也不会列出什么最少模块加载方案什么的。所以,我只会说出一些参考。 
  22. apache(perfork)下的模块加载,并不是模块加载列表,没有的模块并不是屏蔽掉了,只是我也不清楚它的实际作用。 
  23. (一)、对于apache2.2,模块名有cache的一般都是有用的,因为有不少的这类模板都是2.1以上的apache才支持的,所以这类的模块不会是无缘无缘而存在的。 
  24. (二)、很有可能或必用到的模块有: 
  25. LoadModule auth_basic_module modules/mod_auth_basic.so 
  26.   LoadModule authn_file_module modules/mod_authn_file.so 
  27.   LoadModule include_module modules/mod_include.so 
  28.   LoadModule log_config_module modules/mod_log_config.so 
  29.   LoadModule expires_module modules/mod_expires.so 
  30.   LoadModule deflate_module modules/mod_deflate.so 
  31.   LoadModule headers_module modules/mod_headers.so 
  32.   LoadModule setenvif_module modules/mod_setenvif.so 
  33.   LoadModule mime_module modules/mod_mime.so 
  34.   LoadModule autoindex_module modules/mod_autoindex.so 
  35.   LoadModule negotiation_module modules/mod_negotiation.so 
  36.   LoadModule dir_module modules/mod_dir.so 
  37.   LoadModule alias_module modules/mod_alias.so 
  38.   LoadModule rewrite_module modules/mod_rewrite.so 
  39.  
  40. (三)、我粗略点了一下apache里面的模块约在50+以,要从中选择人人都适用的模块加载列表是不可能的,至少cgi模块我是不会用,但不排除你不会用。 
  41.  
  42. 模块加载这一块就说到这里,这个大家多百度,多用自然会识别出一些有用模块并渐渐屏蔽不使用的模块。 
  43.  
  44. 接下来,就是最为重要的perfork配置,也是困扰了我很久的问题,尽管参数就那么6个,那是却足以让你的vps当机。先列出需要修改的参数,修改位于httpd.conf的文件里面 
  45.  
  46. Timeout 30 
  47. KeepAlive On 
  48. MaxKeepAliveRequests 80 
  49. KeepAliveTimeout 15 
  50. <IfModule prefork.c> 
  51. ServerLimit 150 
  52. StartServers      5 
  53. MinSpareServers   5 
  54. MaxSpareServers   10 
  55. MaxClients       150 
  56. MaxRequestsPerChild 4000 
  57. </IfModule>  
  58.  
  59. 上面的代码就是要修改的,实际上我们是要修改perfork里在的参数,之所以将Timeout,KeepAlive等也写出来,是因为这个也是影响apache性能的。 
  60. Timeout是一个连接多少时间后断开,这个参数设置在30-60是一般的php程序都是适用的,至少要运行一些要占用大量时间的php程序,那么适当调高也是可以的,但请不要太高,否则会影响apache性能,本次优化我们使用30就很足够了。 
  61. MaxKeepAliveRequests 是一个连接最大的请求量,对于页面有较多的图片等元素,可以适当调高一点,对于一般的网页设置在80-120是足够的,我们就设置为100,如果设置太高会导致httpd长时间不能退出释放内存的。 
  62. KeepAliveTimeout 是当用户处理一次连接时,如果在该参数的时间内还有请求则会继续执行,不需要重新创建新的连接,直到达到MaxKeepAliveRequests的最大值才会退出。对于perfork模式下的,有人认为是将KeepAlive Off会比较好,但是对于绝大多数的网站都会不多不少有些图片元素,所以将该项打开,并将KeepTimeOut设置在2-5秒,不但有效提高服务器性能,也能加快页面打开速度。 
  63. 接下来,就是正式进入perfork的参数设置了,不想服务器运行一会就内存占满的得看看哦。 
  64. 首先是参数ServerLimit就是服务器最大支持同时连接的客户端,该值将决定下面参数MaxClient可以设定的值的范围。ServerLimit实际上只是起到一个限制的作用,并没有实际有作用,也许有,我就不知道了。实际上起到作用的是,MaxClient参数,但这个值又受ServerLimit的限制,等下会讲。 
  65. 另三个参数StartServers,MinSpareServers,MaxSpareServers,为什么将这三个参数一起说呢,因为这三个数是联系在一起的。这三个数都是决定空闲进程数量,StartServers应该范围就是MinSpareServers和MaxSpareServers之间。否则,apache会自动将该值还原到两都之间,所以不要浪费不必要的资源。按照perfork默认的配置,这三个参数分别为:5,5,10。但是对于只有512M内存的vps来说,我认为还是有过大的负载。因此,我认为在这里应该退一步,将这三个参数设置为4,4,10,看起来和上面5,5,10并没有什么不同,最大值还是10,但在实际使用中4,4,10释放的内存速度会明显比5,5,10快很多。 
  66. 接下来就是MaxClient最大支持多少客户端在同一时间连接服务器,简单说就是最大并发数支持,这个没有特别需要说的。对于512M的vps你也别想你的站能承受百万PV,使用默认的150已是超出负载的了。一般将ServerLimit和MaxClient设为一样值即可。 
  67. 最后就是MaxRequestsPerChild参数,一个进程在处理多少次之后退出,设置为0则是无限次,也就是说不会退出,那么httpd进程也不会退出。那么,你就等着你的vps当机重启去吧。对于这个参数,我粗略地搜索了一下,不少人推荐在1000次,也有100次的。据我的测试,对于内存只有512M的vps来说,该值设置在500以上都会很快占满内存,但不至少于当机。而观察得知,一但内存占满,cpu的使用率几乎变为0了。由此可知,当机了那什么都干不了了,还不如消耗多一点cpu资源避免,提高稳定性。所以,我最后的决定是将该值定义在30-40之间。这样设定后,可以看出,内存释放速度得到很大的提升,但也可以看到cpu也在频繁上下跳动。这样设置,即使内存占满,也能在最短时间恢复正常。 
  68. 所以对于512MB的vps,apache(perfork模式)最后的优方配置为: 
  69. Timeout 30 
  70. KeepAlive On 
  71. MaxKeepAliveRequests 100 
  72. KeepAliveTimeout 2 
  73. <IfModule prefork.c> 
  74. ServerLimit 150 
  75. StartServers      4 
  76. MinSpareServers   4 
  77. MaxSpareServers   10 
  78. MaxClients       150 
  79. MaxRequestsPerChild 40 
  80. </IfModule> 
  81.  
  82. 这样,我们的配置基本完成,进行负载测试即可。负载测试,我们使用ab测试,先声明一点,是用你本地的虚拟机去测试服务器上的一个静态页面,而不是在服务器上测试。之前,我就是这样做,因为网速一样,效果都是比较好的,但别人都是不同网速的,所以服务器上测试是不准确的。 
  83.  
  84. 3、现在看看需要怎么优化: 
  85.       连接数理论上是越大越好,但是得根据硬件,服务器的CPU,内存,带宽等因素,查看当前的apache连接数: 
  86. ps aux | grep httpd | wc -l 
  87.  
  88.       计算httpd 占用内存的平均数: 
  89. ps aux | grep -v grep |awk '/httpd/{sum += $6;n++};END{print sum/n}' 
  90.  
  91.       这个只是做个参考。计算后要减去服务器系统本身所需要的资源。 
  92.       比如内存2G,减去500M留给服务器,还有1.5G,那么可得到最大连接数:在8000左右。 
  93.       根据情况修改后的httpd.conf的prefork的配置后为: 
  94. <IfModule prefork.c> 
  95.      StartServers          5 
  96.      MinSpareServers       5 
  97.      MaxSpareServers      10 
  98.      ServerLimit         5500 
  99.      MaxClients          5000 
  100.      MaxRequestsPerChild   100 
  101. </IfModule> 
  102. 这里重点介绍下ServerLimit,必须放到MaxClients前,值要大于MaxClients。 
  103.  
  104. 4 重启apache,再打开网站看看是否还会有慢的问题了。 
  105.  
  106. 附注:可以使用以下命令找到httpd.conf文件 
  107. find / -name httpd.conf 

 

你可能感兴趣的:(apache,职场,休闲,apache优化)