Доброго времени суток!
У меня на сервере стоит: OS GNU/Linux Debian 5.0, Apache, PHP, mySQL.
И есть PHP-скрипт, который очень часто (~5-10 раз в секунду) ловит запросы (HTTP POST) по 10-20 KB и вставляет их в mySQL базу.
Проблема в том, что мой сервер загибается под таким напором (VDS; 1GHz 1GB RAM) — заканчивается оперативка и в памяти висят куча процессов в состоянии sleeping (через top смотрел).
Я не могу понять где тут "слабое звено". Это Apache, который тратит много ресурсов на создание 1 процесса, при обращении к PHP-скрипту или тут дело в mysql ? Или вообще нужно взять нормальный выделенный сервер и это всё из-за Virtual DS.
Если кто-то сталкивался с этим, плз. расскажите что нужно настроить. Если нет, по подскажите системные мониторы какие-нибудь, где можно посмотреть как расходуется оперативка.
Так же, хотел бы поинтересоваться — в качестве временного решения: есть ли какой-нибудь софт, который убивает процессы, если происходит переполнение ОЗУ ? Смотрел OMM Killer — но там нельзя добавить исключения на, скажем, mysqld (т.е. он спокойно может грохнуть СУБД).
Здравствуйте, gribodemon, Вы писали:
g> Проблема в том, что мой сервер загибается под таким напором (VDS; 1GHz 1GB RAM) — заканчивается оперативка и в памяти висят куча процессов в состоянии sleeping (через top смотрел).
1) Ограничить максимальное количество процессов Apache через ServerLimit/MaxClients до разумного числа, чтобы не плодились, отключить KeepAlive, увеличить MaxRequestsPerChild.
2) Ограничить аппетиты MySQL по памяти (если InnoDB не используется — отключить этот движок вообще). Если используется MyISAM то вспомнить, что вставка данных лочит всю табличку и использовать, например, INSERT DELAYED.
g> Или вообще нужно взять нормальный выделенный сервер и это всё из-за Virtual DS.
Здравствуйте, gribodemon, Вы писали:
G>Проблема в том, что мой сервер загибается под таким напором (VDS; 1GHz 1GB RAM) — заканчивается оперативка и в памяти висят куча процессов в состоянии sleeping (через top смотрел). G>Я не могу понять где тут "слабое звено". Это Apache, который тратит много ресурсов на создание 1 процесса, при обращении к PHP-скрипту или тут дело в mysql ? Или вообще нужно взять нормальный выделенный сервер и это всё из-за Virtual DS.
Здравствуйте, gribodemon, Вы писали:
g> AB>... отключить KeepAlive. ... g> Вообще, KeepAlive будет работать, только если клиент в HTTP запросе будет слать что-то вроде: ?
Да. Кто является клиентом в твоем случае не знаю, по этому до кучи все равно не помешает.