У меня есть веб-сервер, на котором я размещаю около 6-7 веб-сайтов. Большинство этих веб-сайтов получают свой контент из MySQL, который размещен на том же сервере. Средняя посещаемость в день - около 500-600 уникальных посетителей, около 150 тыс. Посещений в неделю.
Но по какой-то причине иногда веб-сайты отправляют тайм-аут, ИЛИ иногда веб-сайты не загружают все изображения. Я знаю, что мне, возможно, следует отделить статический контент от динамического, но пока я думаю, что это невозможно.
Я был бы признателен за любые предложения о том, как я могу улучшить производительность apache, чтобы он не превышал тайм-аут.
Сервер работает на Sempron LE 1300; 2,3 ГГц, 512 КБ ОЗУ 2 ГБ ОЗУ 10 Мбит / с / 1 Мбит / с
Сервисы: MySQL, ProFTPD, Apache.
Private + Shared = RAM used Program
----------------------------------------------------
1.2 MiB + 54.0 KiB = 1.2 MiB proftpd
4.1 MiB + 23.0 KiB = 4.1 MiB munin-node
20.8 MiB + 120.5 KiB = 20.9 MiB mysqld
47.3 MiB + 9.9 MiB = 57.3 MiB apache2 (22)
top: Mem: 2075356k total, 1826196k used, 249160k free,
Timeout 35
KeepAlive On
MaxKeepAliveRequests 300
KeepAliveTimeout 5
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 20
MaxSpareServers 20
MaxClients 60
MaxRequestsPerChild 1000
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Хотя трудно сказать наверняка, не взглянув на журнал ошибок Apache, я был бы обеспокоен тем, что вы размещаете шесть или семь веб-сайтов при подключении к Интернету с пропускной способностью только 1 Мбит. Я предполагаю, что это либо в очень маленьком офисе, либо в вашем собственном доме. Хотя 1 Мбит может быть достаточным для ваших ожиданий по трафику, звучит довольно правдоподобно, что соединение 1 Мбит является причиной проблем с периодической загрузкой веб-сайта.
Я бы предложил либо передать ваши сайты на аутсорсинг профессиональному веб-хостингу, либо, возможно, приобрести недорогой VPS на базе Xen у такого поставщика, как Linode или Slicehost.
По крайней мере, убедитесь, что ваш DNS размещен на профессиональном и внешнем хостинге.
Если проблема не в вашем Интернете, я бы подумал, что у Apache не хватает памяти. Apache с mod_php занимает довольно много памяти, каждый процесс потребляет до 50 МБ оперативной памяти. Объедините это с настройкой Apache KeepAlive по умолчанию, равной 15 секундам, и у вас может не хватить памяти, в зависимости от того, сколько места под SWAP вы выделили.
Лично я бы выбрал асинхронную управляемую событиями модель lighttpd или nginx fastcgi, которая может обрабатывать гораздо больше соединений при использовании части памяти.
Надеюсь это поможет.
Похоже, что серверов / потоков может не хватить. Вы проверили свой журнал ошибок apache или системный журнал? Если я не совсем ошибаюсь, он должен сказать вам, какой ресурс вам нужно увеличить.
Кроме того, я вижу, что вы даете нам настройки mpm для prefork и worker. Взгляните на ответ на вопрос Как узнать, работает ли apache как предварительная вилка или как рабочий? относительно того, как узнать, какой mpm вы используете.