Linux

推薦的 Apache 配置?

  • February 18, 2012

如果這樣的問題對你來說太膚淺,很抱歉提出這樣的問題。考慮到以下資訊,您將如何配置 httpd.conf?

伺服器繁忙時頁面載入時間達到30秒。

伺服器:

Quad-Xeon 3220 / 8GB 記憶體 / 2x250GB SATAII / 10TB BW / 1GiGE / 8 IPS (SoftLayer), CentOS 5 (64-bit) Plesk 9.5

Linux server.x.com 2.6.18-274.17.1.el5 #1 SMP Tue Jan 10 17:25:58 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

伺服器上的站點平均每天接收大約 500,000 次網頁瀏覽和 200GB。根據http://whos.amung.us/stats/ ,當伺服器繁忙時,大約有 1500 名訪問者線上。

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
  2. 每個httpd程序使用的記憶體量(大約 300MB 來自您的輸出)和您的機器擁有的記憶體量。

徹底檢查httpd.conf並刪除任何不必要的模組以減少記憶體佔用是個好主意。一旦你這樣做了,你就可以開始MaxClients逐漸加註ServerLimit

您也需要提高,StartServers但再次逐步執行此操作,並在每次更改後監視記憶體使用情況和站點性能一段時間。MinSpareServers``MaxSpareServers

其他需要考慮的事情是在 Apache 或(如 Fernando 建議的)APC 前面放置Varnish之類的東西。

引用自:https://serverfault.com/questions/361501