LAMP 优化 之一 apache/httpd

来源:互联网 发布:明实录知乎 编辑:程序博客网 时间:2024/06/11 04:33

先解释一下LAMP:

L - linux

A- apache

M-mysql

P- php

(原文链接 http://ddbiz.com/?p=236)

我们的服务多架构在这上面,我们会分别讨论不同部分对整个系统的影响和调优办法。当然最好的指导手册还是应用的原始文档。我们将结合不同的现象,分别讨论各自的解决办法

 

现象:

近日服务器的web访问变得很慢, 很多图片都要刷新才能显示出来。操作系统为 CentOS 5.x

 

系统跟踪

查看一下网络连接数据

    netstat -anlp | grep ":80" | wc -l

    127

只有区区100多个建立的请求。

 

再看看http进程

    ps auxf | grep http | wc -l

    48

怎么只有48个进程在服务。

 

打开配置文件,prefork MPM配置如下

<IfModule prefork.c>
ServerLimit      200
StartServers       30
MinSpareServers    10
MaxSpareServers    50
MaxClients        200
MaxRequestsPerChild  1000
</IfModule>

根据文档(以下内容出自httpd 手册):

ServerLimit

对于preforkMPM,这个指令设置了MaxClients最大允许配置的数值。任何在重启期间对这个指令的改变都将被忽略,但对MaxClients的修改却会生效。

使用这个指令时要特别当心。如果将ServerLimit设置成一个高出实际需要许多的值,将会有过多的共享内存被分配。如果将ServerLimit和MaxClients设置成超过系统的处理能力,Apache可能无法启动,或者系统将变得不稳定。

对于preforkMPM,只有在你需要将MaxClients设置成高于默认值256的时候才需要使用这个指令。要将此指令的值保持和MaxClients一样。

 

MaxClients

MaxClients 指令设置了允许同时伺服的最大接入请求数量。任何超过MaxClients限制的请求都将进入等候队列,直到达到ListenBacklog指令限制的最大值为止。一旦一个链接被释放,队列中的请求将得到服务。

对于非线程型的MPM(也就是prefork),MaxClients表示可以用于伺服客户端请求的最大子进程数量,默认值是256。要增大这个值,你必须同时增大ServerLimit 。

 

StartServers
StartServers指令设置了服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。不同的MPM默认值也不一样。对于prefork默认值是"5"。

MaxRequestsPerChild

MaxRequestsPerChild指令设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。
在mpm_netware和mpm_winnt上的默认值是"0"。

将MaxRequestsPerChild设置成非零值有两个好处:

  • 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
  • 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

 

看上去需要调整一下了,结果如下:

 

# prefork MPM
<IfModule prefork.c>
ServerLimit      2048
#StartServers       60
#MinSpareServers    10
#MaxSpareServers    50
MaxClients        2048
MaxRequestsPerChild  1000
</IfModule>

然后重启服务,客户端访问快了很多(原文链接 http://ddbiz.com/?p=236)

原创粉丝点击