如果这对您来说太肤浅,很抱歉问这样的问题。考虑到以下信息,您将如何配置 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
需要考虑的事项:
- 您的最大在线客户数量约为 1500
- 每个进程使用的内存量
httpd
(从您的输出来看大约为 300MB)以及您的机器拥有的内存量。
彻底检查并删除任何不必要的模块以减少内存占用是一个好主意httpd.conf
。完成此操作后,您可以开始逐步MaxClients
提高ServerLimit
。
您也可能需要提高StartServers
,MinSpareServers
和MaxSpareServers
,但同样需要逐步进行,并在每次更改后监控内存使用情况和站点性能一段时间。
其他需要考虑的事情是放置类似漆在 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。请先检查这一点。