Назад | Перейти на главную страницу

Рекомендуемая конфигурация Apache?

Извините за такой вопрос, если он для вас слишком поверхностен. Учитывая информацию ниже, как бы вы настроили httpd.conf?

Время загрузки страниц достигает 30 секунд, когда сервер занят.

Сервер:

Quad-Xeon 3220/8 ГБ памяти / 2x250 ГБ SATAII / 10 ТБ BW / 1GiGE / 8 IPS (SoftLayer), CentOS 5 (64-разрядная версия) Plesk 9.5

Linux server.x.com 2.6.18-274.17.1.el5 # 1 SMP Вт, 10 января 17:25:58 EST 2012 x86_64 x86_64 x86_64 GNU / Linux

Сайты на сервере получают около 500 000 просмотров страниц и в среднем 200 ГБ в день. Когда сервер занят, по данным 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>

Если возможно, попробуйте переключиться на другой веб-сервер, например Nginx или Lighttpd. Apache великолепен, но обычно он плохо справляется с загруженными веб-сайтами.

Если не можешь, не беда. Вот несколько советов, которые могут вам помочь:

1. Отключить журналы

Если ваше приложение не зависит от файлов журналов и вы используете Analytics или другую службу для статистики, вы можете отключить журналы. Вы увидите прерывание ввода-вывода, потому что apache не должен записывать каждый запрос на диск.

2. Вы используете PHP? Кеширование кодов операций обязательно!

Я предпочитаю APC, потому что он прост в установке, стабилен и скоро станет частью PHP. Чтобы установить его, просто запустите:

pecl install apc

Они добавляют в ваш php.ini следующую строку:

extension="apc.so"

Перезагрузите ваш веб-сервер и посмотрите, как падает нагрузка.

3. Перейти на другой MPM

В некоторых случаях может помочь переход на MPM worker или event. Это действительно зависит от типа файлов, которые вы обслуживаете. Я видел случаи, когда после этого нагрузка падала, а другие выполнялись как prefork или worker, не имело особого значения.

Примечание: вы можете сломать PHP, если измените его на worker и запустите его как модуль DSO. Сначала проверьте это.

Что следует учитывать:

  1. Максимальное количество ваших онлайн-клиентов ~ 1500
  2. Объем памяти каждый httpd процесс использует (около 300 МБ от вашего вывода) и объем памяти вашей машины.

Было бы неплохо тщательно изучить ваш httpd.conf и удалите все ненужные модули, чтобы сократить объем памяти. Как только вы это сделаете, вы можете начать повышать MaxClients и ServerLimit постепенно.

Вы хотите поднять StartServers, MinSpareServers и MaxSpareServers тоже, но снова делайте это постепенно и отслеживайте использование памяти и производительность сайта в течение некоторого времени после каждого изменения.

Также следует подумать о размещении чего-то вроде Лак перед Apache или (как предлагает Фернандо) APC.