Извините за такой вопрос, если он для вас слишком поверхностен. Учитывая информацию ниже, как бы вы настроили 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. Сначала проверьте это.
Что следует учитывать:
httpd
процесс использует (около 300 МБ от вашего вывода) и объем памяти вашей машины.Было бы неплохо тщательно изучить ваш httpd.conf
и удалите все ненужные модули, чтобы сократить объем памяти. Как только вы это сделаете, вы можете начать повышать MaxClients
и ServerLimit
постепенно.
Вы хотите поднять StartServers
, MinSpareServers
и MaxSpareServers
тоже, но снова делайте это постепенно и отслеживайте использование памяти и производительность сайта в течение некоторого времени после каждого изменения.
Также следует подумать о размещении чего-то вроде Лак перед Apache или (как предлагает Фернандо) APC.