Оптимизация Apache на слабом VDS

123 4
V
На сайте с 28.02.2008
Offline
14
5115

Ситуация такая:

есть VDS, из которого нужно выжать максимум.

Конфигурация:

Проц. - 370 Мгц

Память гарантированаая - 160, иногда может выдавать до 480.

ОС - FreeBSD.

Apache 2 + PHP 5 + MySQL 5.

Раньше было 1500 хостов, и проблем мы не знали.

Но, купили трафик + продвинулись в поисковиках, посещаемость выросла до 6000 хостов (50 000 хитов). И начались проблемы...

Load Average поднялся до 20.00 15.00 10.00 (в среднем) и стала падать база. Помогала перезагрузка всего VDS, но не на долго. Пока база работала, при попытке загрузить страницу, сервер сразу отвечал, отдавая заголовок, через длинную паузу - шапку и т.п. Страница загружалась медленно.

При этом Apache использовал настроки по умолчанию.

Решили поковырять httpd.conf, и вот к какому результату пришли.

Директивы: (раньше они вообще прописаны не были)

KeepAlive On

MaxKeepAliveRequests 50

KeepAliveTimeout 20

MinSpareServers 5

MaxSpareServers 10

StartServers 5

MaxClients 5

MaxRequestsPerChild 5

HostnameLookups Off

После прописания директив, база падать перестала. Это уже радует, но скорость работы не увеличилась.

Что странно, изменение большинства числовых значений директив не дает эффекта. Самый заметный эффект - у KeepAliveTimeout. При значении 5, Load Average поднимается иногда до 30.00 20.00 20.00 ну и конечно все тормозит. При значении 30, сервер работает стабильно, Load Average подает до 3.00 2.00 1.00. Но при попытке перейти на страницу, браузер долго не получает ответа (2-3 минуты), а потом страница в один миг полностью загружается.

Вопрос знатокам: какие при подобных "физических" данных сервера прописать значения директив, чтобы сервер работал стабильно, и при этом максимально быстро.

Мануалы читал, пробовал разные значения, но хорошего эффекта не добился. К сожалению, нету у нас сис.админов, потому прошу помощи.

PHP и MySQL настроены максимально, скрипты оптимизированы. А с апачем проблемы.

Заранее спасибо.

zzeus
На сайте с 04.01.2008
Offline
74
#1

спасет кеширование. не апачем. но не надолго.

вообще - расширяйте возможности vps

V
На сайте с 28.02.2008
Offline
14
#2

Некоторые информационные блоки кешируются. Но в силу особенностей проекта можно кешировать лишь часть данных.

М
На сайте с 08.02.2006
Offline
59
#3

Подумайте о даунгрейде Апача до первой версии и Мускуля до 4, а то и 3-ей версии

iBBi
На сайте с 13.02.2007
Offline
328
#4

тут только переходить на более мощный вдс.

K
На сайте с 24.03.2004
Offline
223
#5
vibro:

MaxRequestsPerChild 5

а зачем так жестоко?

проверенная ддос защита (http://ddos-protection.ru) -> http://ddos-protection.ru (http://ddos-protection.ru), бесплатный тест, цена от размера атаки не зависит.
rustelekom
На сайте с 20.04.2005
Offline
543
#6

вполне можно перейти на lightspeed к примеру. работает не в пример легче. но, вобще описанная вами ситуация подозрительна. KeepAliveTimeout - это время в течение которого открытый для нового посетителя процесс "помнит" о его запросе. то есть как бы такой малюсенький "кеш" в памяти. и по логике его увеличение не замедлять должно отклик страницы а наоборот - ускорять. уменьшение KeepAliveTimeout приводит у вас к увеличению общей нагрузки, это может быть вызвано большим количеством подтягивания файлов с диска но, скорее всего просто до вас больше пользователей могут достучаться при таком раскладе и соответсвенно больше запросов начинают отрабатываться по полной программе. А тут уже надо смотреть и в мускуль - возможно там процессы засыпают или полно медленных запросов.

Простой пример - всем известный phpbb имеет одну таблицу worldmatch что то там - служит чисто для запоминания поисковых запросов на сайте. так вот даже на не очень посещаемых форумах таблица может разрастись до 100 к записей и при том что каждый раз при обращении к сайту прогоняется весь этот объем селектом открытие страниц замедляется в разы. А вебмастер который ни слухом ни духом начинает в таких случаях гнать на хостера - типа вот у вас медленно стал открываться сайт...

60% скидка на VPS в США, 20% скидка в Нидерландах и 40% в Финляндии. Новые тарифы на AMD Ryzen 9950x с частотой до 5.7 ГГц со скидкой 40% RoboVPS https://www.robovps.biz
Zaqwr
На сайте с 08.08.2007
Offline
111
#7

MaxRequestsPerChild 100

а ещё не плохо было бы увидеть скажем top во время сильной загрузки сервера может действительно мускуль много "ест"

Администрирование, Linux, Cisco, Juniper
V
На сайте с 28.02.2008
Offline
14
#8

Спасибо всем, кто ответил.

Магнат, даунгрейд Мускуля не возможен, т.к. проект написан под 5-ю версию.

iBBi, переходить на более мощный VDS думаем позже. Пока же нужно выжать максимум из того, что имеем в данный момент.

kostich, а какое значение MaxRequestsPerChild лучше выставить в данном случае? Я же потому и создал эту тему, что не разбираюсь в настройках апача...

rustelekom, у нас память вся забита и, видимо, при уменьшении KeepAliveTimeout ее просто начинает не хватать.

Zaqwr, ага, сейчас попробую. По top'у мускуль есть немного. Много ест Apache (десятки процессов по 12-16 Мб).

vibro добавил 29.02.2008 в 09:43

Вот кусок top'а:

last pid: 41528; load averages: 1.46, 1.51, 1.19 up 0+01:31:47 09:37:50
71 processes: 1 running, 69 sleeping, 1 zombie
CPU states: 2.7% user, 0.0% nice, 0.0% system, 0.0% interrupt, 97.3% idle
Mem: 160M Active, 337M Inact
Swap: 320M Total, 8024K Used, 312M Free, 2% Inuse

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
41521 www 1 96 0 16392K 9612K select 0 0:00 15.61% httpd
41520 www 1 96 0 16392K 9592K select 0 0:00 7.53% httpd
40799 www 1 96 0 16392K 9248K select 0 0:01 4.64% httpd
41518 www 1 96 0 16384K 9588K select 0 0:00 3.23% httpd
41519 www 1 96 0 16384K 9576K select 0 0:00 3.23% httpd
41346 www 1 96 0 16392K 9548K select 0 0:00 3.13% httpd
41335 www 1 96 0 16392K 9560K select 0 0:00 3.07% httpd
41243 www 1 96 0 16392K 9556K select 0 0:00 3.04% httpd
41247 www 1 96 0 16392K 9544K select 0 0:00 2.65% httpd
39920 www 1 96 0 16392K 9208K select 1 0:01 2.54% httpd
40095 www 1 96 0 16392K 9324K select 0 0:01 2.39% httpd
40714 www 1 96 0 16392K 9204K select 0 0:01 2.05% httpd
40808 www 1 96 0 16392K 9216K select 0 0:01 1.95% httpd
41288 www 1 96 0 16392K 9564K select 0 0:00 1.88% httpd
40052 www 1 96 0 16392K 9336K select 1 0:01 1.37% httpd
41344 www 1 96 0 16392K 9432K select 0 0:00 1.26% httpd
40855 www 1 96 0 16392K 9208K select 0 0:00 1.07% httpd
41102 www 1 96 0 16392K 9212K select 0 0:00 0.98% httpd
39407 www 1 96 0 16392K 9536K select 1 0:01 0.98% httpd
40716 www 1 96 0 16392K 9528K select 0 0:01 0.98% httpd
41293 www 1 96 0 16392K 9552K select 1 0:00 0.79% httpd
40723 www 1 96 0 16392K 9264K select 0 0:00 0.68% httpd
40579 www 1 96 0 16392K 9252K select 0 0:01 0.68% httpd
41337 www 1 96 0 16236K 8668K select 0 0:00 0.50% httpd
41295 www 1 96 0 16392K 9248K select 0 0:00 0.45% httpd
41284 www 1 96 0 16392K 9536K select 0 0:00 0.44% httpd
41281 www 1 96 0 16392K 9544K select 1 0:00 0.44% httpd
40055 www 1 96 0 16392K 9528K select 0 0:01 0.44% httpd
40810 www 1 96 0 16392K 9248K select 0 0:00 0.44% httpd
41375 www 1 96 0 16392K 9500K select 0 0:00 0.41% httpd
41345 www 1 96 0 16392K 9412K select 0 0:00 0.30% httpd
40600 www 1 96 0 16392K 9216K select 0 0:00 0.24% httpd
40719 www 1 96 0 16384K 9504K select 1 0:01 0.15% httpd
41108 www 1 96 0 16400K 9508K select 0 0:00 0.10% httpd
41222 www 1 96 0 16392K 9528K select 0 0:00 0.05% httpd
20507 mysql 5 20 0 15112K 6844K kserel 0 0:23 0.00% mysqld
20517 root 1 8 0 16164K 7928K nanslp 0 0:02 0.00% httpd

Видно, что не хватает памяти.

В связи с этим еще вопрос. Процессы апача занимают в среднем 16392K. Как можно уменьшить эту цифру? Отключить лишние модули апача?

Может кто-то что-то еще посоветует?..

Andreyka
На сайте с 19.02.2005
Offline
822
#9

nginx вместо апача?

Не стоит плодить сущности без необходимости
V
На сайте с 28.02.2008
Offline
14
#10

Andreyka, скажем так: nginx - это крайний случай. По возможности хотелось бы сохранить текущую конфигурацию, но выжать из нее максимум, произведя необходимые настройки.

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий