Решено: Нехватка памяти на сервере. (Нужно определить что занимает память.)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Решено: Нехватка памяти на сервере.

Сообщение Alex2ndr »

Всем доброго времени суток!

Есть некий сервер на VPS. Стоит на нем CentOS release 5.4. Поднят Apache и на нем некий сайт на joomla и форум - phpbb3. Неожиданно, при заходе на форум, посыпались ошибки вида:
Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)...

После гугления была найдена тема, где предлагалось увеличить размер memory_limit в php.ini. Установили в 512Мб. Но это не помогло - ошибки продолжали сыпаться. Стали исследовать дальше. Выяснилось что сам сервер страдает от недостатка памяти. После выполнения grep -r memory /var/log было найдено следующее:

Код: Выделить всё

/var/log/httpd/error_log.2:[Thu Sep 16 22:34:22 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.2:[Thu Sep 16 22:34:32 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.2:[Thu Sep 16 22:34:42 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:20:59 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:21:09 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:Out of memory (Needed 84000 bytes)
/var/log/httpd/error_log.1:[Tue Sep 21 17:21:19 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:Out of memory
/var/log/httpd/error_log.1:[Tue Sep 21 17:21:29 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:21:39 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:21:49 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:Out of memory (Needed 84000 bytes)
/var/log/httpd/error_log.1:[Tue Sep 21 17:21:59 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:22:09 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:22:19 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:22:29 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:22:39 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:22:49 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:22:59 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:23:09 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Tue Sep 21 17:23:19 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:42:49 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:Out of memory
/var/log/httpd/error_log.1:Out of memory
/var/log/httpd/error_log.1:[Wed Sep 22 18:42:59 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:43:09 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:43:19 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:43:29 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:43:39 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:43:49 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:43:59 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:44:09 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:44:19 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:44:29 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:44:39 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:44:49 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:44:59 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:45:09 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:45:26 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 18:45:36 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:51:16 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:51:26 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:51:36 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:51:46 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:51:56 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:52:06 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:52:16 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:52:26 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:52:36 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:52:46 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:52:56 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:53:06 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:53:16 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 20:53:26 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 21:04:18 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:Out of memory (Needed 10576 bytes)
/var/log/httpd/error_log.1:[Wed Sep 22 21:11:37 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 21:14:00 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 21:14:10 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 21:14:20 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/httpd/error_log.1:[Wed Sep 22 21:14:30 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
/var/log/exim/mainlog.1:2010-09-21 17:22:27 daemon: accept process fork failed: Cannot allocate memory
/var/log/exim/mainlog.1:2010-09-22 18:42:52 daemon: accept process fork failed: Cannot allocate memory
/var/log/exim/mainlog.1:2010-09-22 18:43:45 daemon: fork of queue-runner process failed: Cannot allocate memory
/var/log/exim/mainlog.1:2010-09-22 18:43:58 daemon: accept process fork failed: Cannot allocate memory
/var/log/exim/mainlog.1:2010-09-22 18:45:04 daemon: accept process fork failed: Cannot allocate memory
/var/log/exim/paniclog.1:2010-09-21 17:22:27 daemon: accept process fork failed: Cannot allocate memory
/var/log/exim/paniclog.1:2010-09-22 18:42:52 daemon: accept process fork failed: Cannot allocate memory
/var/log/exim/paniclog.1:2010-09-22 18:43:45 daemon: fork of queue-runner process failed: Cannot allocate memory
/var/log/exim/paniclog.1:2010-09-22 18:43:58 daemon: accept process fork failed: Cannot allocate memory
/var/log/exim/paniclog.1:2010-09-22 18:45:04 daemon: accept process fork failed: Cannot allocate memory

Т е видно что памяти не хватает не только Апачу, но и иным приложениям.( в отдельные моменты среди таких ошибок проскакивало даже sshd)
На сервере установлено 768Мб.

Собственно вопрос - как определить что именно пожирает память. Догадываюсь, что Apache, но как узнать на чем он ее так кушает и как бы его аппетит ограничить. Пожалуйста, не предлагайте сидеть с top и наблюдать - такая ситуация случается не очень часто(но периодично).

Всем спасибо за внимание!
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Решено: Нехватка памяти на сервере.

Сообщение neol »

Во-первых, если есть неиспользуемые модули Apache/PHP - отключайте.
Потом можно уменьшить MaxClients, MinSpareServers, MaxSpareServers. От излишнего потребления памяти это должно помочь, но от проблем с заходом в пиковые часы окончательно может и не избавить.
Вообще конфиг apache было бы неплохо посмотреть.

Ну и nginx можно поставить перед apache, если религия позволяет.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Решено: Нехватка памяти на сервере.

Сообщение KiWi »

neol писал(а):
28.09.2010 17:31
Ну и nginx можно поставить перед apache, если религия позволяет.

nginx+php-fpm тогда уж
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Решено: Нехватка памяти на сервере.

Сообщение rm_ »

inno_db в MySQL выключить - минус 100 мегабайт использования оперативки.
Если ничего из софта её не требует.

А вообще - заменить Apache на lighttpd, и тогда никакой nginx не нужен.
Ну или просто заменить на nginx, говорят он не только обратным прокси работать умеет.
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Решено: Нехватка памяти на сервере.

Сообщение Alex2ndr »

Всем большое спасибо за ответы!
Вероятно от организации схемы "фронтэнд-бэкэнд" здесь не уйти. Посещаемость растет медленно, но верно, поэтому варианты типа "отключить неиспользуемое" принесут недолгое облегчение. Пойду изучать мануалы...
Спасибо сказали:
Creature
Сообщения: 2
ОС: Фря

Re: Решено: Нехватка памяти на сервере.

Сообщение Creature »

Ставил как то себе ентот ужос CentOS. ИМХО попробуйте радикальный вариант FreeBSD и даже без иксов. Плюсы - то что сами в запуск в конфиги, например: rc.conf пропишите то стартовать и будет. Соответственно и памяти станет придостаточно
Спасибо сказали:
Аватара пользователя
Sora
Сообщения: 243
ОС: RFR_14

Re: Решено: Нехватка памяти на сервере.

Сообщение Sora »

Creature писал(а):
28.09.2010 22:41
Ставил как то себе ентот ужос CentOS. ИМХО попробуйте радикальный вариант FreeBSD и даже без иксов. Плюсы - то что сами в запуск в конфиги, например: rc.conf пропишите то стартовать и будет. Соответственно и памяти станет придостаточно

Очень сомневаюсь что у топикстартера сервер с иксами :)
И чтоже это по вашему получается, в Centos нельзя настроить запуск демонов? :wacko:
AMD 4600+, 4Gb DDRII-800, GF GTS250 512Mb, HDD 750Gb WD
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Решено: Нехватка памяти на сервере.

Сообщение Alex2ndr »

Creature писал(а):
28.09.2010 22:41
Ставил как то себе ентот ужос CentOS. ИМХО попробуйте радикальный вариант FreeBSD и даже без иксов. Плюсы - то что сами в запуск в конфиги, например: rc.conf пропишите то стартовать и будет. Соответственно и памяти станет придостаточно

Если бы это был физический сервер, то проблемм бы не было. Но это же VPS... И конечно на нем нету Х.

Возник еще один вопрос. С серваком работают люди, которые не очень разбираются в консоли и конфигах. Вся настройка сайтов и прочего осуществляется через панель управления этим серваком - directadmin (а-ля webmin). Она там как-то автоматизированно добавляет в конфиг апача нужные сайты. Поэтому хотелось бы знать - а с использованием "фронтэнд-бэкэнд" эту автоматизацию возможно сохранить? Т е сделать однократные настройки Nginx/Apache и дальше работать как работали(т е дальнейшее добавление сайтов через конфига апача из админки). Что точно эта система добавляет в конфиги я не знаю....
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Решено: Нехватка памяти на сервере.

Сообщение neol »

Creature писал(а):
28.09.2010 22:41
Ставил как то себе ентот ужос CentOS. ИМХО попробуйте радикальный вариант FreeBSD и даже без иксов. Плюсы - то что сами в запуск в конфиги, например: rc.conf пропишите то стартовать и будет. Соответственно и памяти станет придостаточно

Вас с баша выгнали или это такой вид троллинга?

Alex2ndr писал(а):
28.09.2010 23:02
Возник еще один вопрос. С серваком работают люди, которые не очень разбираются в консоли и конфигах. Вся настройка сайтов и прочего осуществляется через панель управления этим серваком - directadmin (а-ля webmin). Она там как-то автоматизированно добавляет в конфиг апача нужные сайты. Поэтому хотелось бы знать - а с использованием "фронтэнд-бэкэнд" эту автоматизацию возможно сохранить? Т е сделать однократные настройки Nginx/Apache и дальше работать как работали(т е дальнейшее добавление сайтов через конфига апача из админки). Что точно эта система добавляет в конфиги я не знаю....

Если малость погуглить, то решение есть, но лучше вам обзавестись специально обученным системным администратором, прежде чем такое ворочать, а то мало ли что (:
Как вариант, если смена панели управления приемлема (обычно хостеры дают некий выбор), могу посоветовать ISPmanager. Там nginx+apache идет из коробки и управление достаточно простое.
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Решено: Нехватка памяти на сервере.

Сообщение Alex2ndr »

neol писал(а):
29.09.2010 00:25
Если малость погуглить, то решение есть, но лучше вам обзавестись специально обученным системным администратором, прежде чем такое ворочать, а то мало ли что (:

Мда... решение конечно сложноватое. С системным администратором тоже плоховато - любительский проект. Я кое-что знаю, но моя специализация в другом...

neol писал(а):
29.09.2010 00:25
Как вариант, если смена панели управления приемлема (обычно хостеры дают некий выбор), могу посоветовать ISPmanager. Там nginx+apache идет из коробки и управление достаточно простое.

Я даже не админ для данного проекта - так... консультант по техническим вопросам :) Я поставлю админов в известность.

Еще раз спасибо!
Спасибо сказали:
patrius
Сообщения: 337
ОС: Debian (4 & 5) -> Gentoo

Re: Решено: Нехватка памяти на сервере.

Сообщение patrius »

Alex2ndr, от себя могу добавить малец инфы на раздумие.
1. Включить MRTG и понаблюдать за памятью.
2. В определённые по MRTG моменты посидеть с top и окнчательно убедиться в том, что апачу не помагают.
3. Подумать о возможных вариантах расширения памяти/ оптимизации использоваия памяти.
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Решено: Нехватка памяти на сервере.

Сообщение Alex2ndr »

patrius писал(а):
29.09.2010 16:05
2. В определённые по MRTG моменты посидеть с top и окнчательно убедиться в том, что апачу не помагают.

Я уже пытался вывести зависимость. Не смог. Возможно когда посещение будет больше... А сейчас просто не предсказать. Это пока случается редко - примерно раз в неделю-две.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Решено: Нехватка памяти на сервере.

Сообщение KiWi »

Самый простой способ узнать кто кушает память -- поставить atop и посмотреть его логи, когда начинает кончаться память(кто больше всех её кушает).

Ещё вариант -- поставить memory_limit в PHP(скорее всего, PHP-скрипты -- УГ и жрут память при некоторых запросах).
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Решено: Нехватка памяти на сервере.

Сообщение Alex2ndr »

KiWi писал(а):
29.09.2010 21:20
Самый простой способ узнать кто кушает память -- поставить atop и посмотреть его логи, когда начинает кончаться память(кто больше всех её кушает).

Вот за atop спасибо. Я уже собрался писать скрипт, который реализует подобны функционал. Но все уже придумано до нас :)
Спасибо сказали: