推荐的 Apache 配置?

推荐的 Apache 配置?

如果这对您来说太肤浅,很抱歉问这样的问题。考虑到以下信息,您将如何配置 httpd.conf?

当服务器繁忙时,页面加载时间会达到30秒。

服务器:

四核 Xeon 3220 / 8GB 内存 / 2x250GB SATAII / 10TB BW / 1GiGE / 8 IPS (SoftLayer)、CentOS 5 (64 位) Plesk 9.5

Linux server.x.com 2.6.18-274.17.1.el5 #1 SMP 2012 年 1 月 10 日星期二 17:25:58 EST x86_64 x86_64 x86_64 GNU/Linux

服务器上的网站平均每天接收约 500,000 次页面浏览量和 200GB 数据。据统计,当服务器繁忙时,大约有 1500 名访问者在线http://whos.amung.us/stats/

top - 11:15:08 up 23 days, 12:21,  1 user,  load average: 0.30, 1.09, 1.84
Tasks: 453 total,   1 running, 452 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.9%us,  2.8%sy,  0.0%ni, 90.3%id,  3.7%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   8165772k total,  8065268k used,   100504k free,   348884k buffers
Swap:  1052248k total,      208k used,  1052040k free,  6466136k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                              
15573 mysql     15   0  601m  80m 4520 S 35.1  1.0   2026:37 mysqld                                                                                                               
19381 apache    15   0  307m  15m 3312 S  1.0  0.2   0:02.73 httpd                                                                                                                
13230 apache    15   0  307m  15m 3296 S  0.7  0.2   0:03.74 httpd                                                                                                                
14152 apache    15   0  307m  15m 3284 S  0.7  0.2   0:03.91 httpd                                                                                                                
16147 apache    15   0  307m  15m 3296 S  0.7  0.2   0:03.14 httpd                                                                                                                
16957 apache    15   0  307m  15m 3292 S  0.7  0.2   0:03.03 httpd               

httpd.conf 文件:

Timeout 60
KeepAlive On
MaxKeepAliveRequests 300
KeepAliveTimeout 5
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75 
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

答案1

需要考虑的事项:

  1. 您的最大在线客户数量约为 1500
  2. 每个进程使用的内存量httpd(从您的输出来看大约为 300MB)以及您的机器拥有的内存量。

彻底检查并删除任何不必要的模块以减少内存占用是一个好主意httpd.conf。完成此操作后,您可以开始逐步MaxClients提高ServerLimit

您也可能需要提高StartServersMinSpareServersMaxSpareServers,但同样需要逐步进行,并在每次更改后监控内存使用情况和站点性能一段时间。

其他需要考虑的事情是放置类似在 Apache 或(正如 Fernando 所建议的)APC 前面。

答案2

如果可能的话,尝试切换到其他网络服务器,如 Nginx 或 Lighttpd。Apache 很棒,但通常不能很好地处理繁忙的网站。

如果你做不到,没关系。以下是一些可以帮助你的提示:

1. 禁用日志

如果您的应用程序不依赖日志文件,并且您使用 Analytics 或其他服务来获取统计数据,则可以禁用日志。您将看到 I/O 下降,因为 apache 不必将每个请求都写入磁盘。

2. 你使用 PHP 吗?Opcode 缓存是必需的!

我更喜欢 APC,因为它安装简单、稳定,而且很快就会成为 PHP 的一部分。要安装它,只需运行:

pecl install apc

然后将以下行添加到您的 php.ini:

extension="apc.so"

重新启动你的网络服务器并观察负载下降。

3. 更换其他 MPM

更改为 worker 或 event MPM 可以解决某些问题。这实际上取决于您服务的文件类型。我看到一些情况,在此之后负载下降,而其他以 prefork 或 worker 形式运行的情况没有任何明显差异。

笔记:如果您更改 worker 并将其作为 DSO 模块运行,则可能会破坏 PHP。请先检查这一点。

相关内容