Bash fork невозможно выделить память

Обновлено: 07.07.2024

Когда я запускаю любую команду в bash shell, она возвращается:

Затем я попробовал отладить утечку памяти с помощью команды ps . Он возвращается:

Как отлаживать? В чем основная проблема?

4 ответа

У меня есть 3 Rails приложения, которые все используют одну и ту же кодовую базу. 2/3 приложений работают нормально, но одно из них выдает мне эту ошибку: не удалось fork новый процесс для подключения: не удается выделить память При попытке взглянуть на журналы Postgres, это немного более.

Я также столкнулся с этой проблемой с моим рабочим столом Ubuntu 14.04.

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

Значение по умолчанию max PID number равно 32768, чтобы просмотреть это значение, выполните команду

Чтобы изменить максимальное число pid, выполните

В моем сценарии основная причина заключалась в том, что один java prcocess породил 18K+ потоков( в linux kernel поток по сути является процессом), чтобы узнать количество потоков каждого процесса, запустите

Возможно, сначала вы захотите проверить использование системной памяти, чтобы убедиться, что осталось достаточно свободной памяти.

Если нет, что в моем случае, пожалуйста, проверьте свой ulimit, набрав ulimit -a , чтобы узнать, достигли ли вы предела максимального количества открытых файлов (в основном вызванного некоторыми определенными процессами, которые занимают много файловых дескрипторов). В этом случае настройка ulimit решит вашу проблему.

У меня была та же проблема. В моем случае, узнав о деталях памяти с помощью " proc/meminfo ", я обнаружил PIDs, что они использовали много CPU, а память с " TOP ".After, я проверил, как долго они работали с" ps-o etime= -p "PID" ". Затем я убиваю PIDs с помощью "убить -9 PID".

Похожие вопросы:

У меня есть сервер apache с 32 GB из RAM. Когда я запускаю сервер и выполняю top, чтобы увидеть ресурсы, он показывает мне, что CPU находится на уровне 95 процентов. Это не нормальное поведение и.

У меня есть 3 Rails приложения, которые все используют одну и ту же кодовую базу. 2/3 приложений работают нормально, но одно из них выдает мне эту ошибку: не удалось fork новый процесс для.

Я получаю эту ошибку в файле журнала моего сервера. [Sun Jan 29 00:22:43.570300 2017] [mpm_prefork:error] [pid 1205] (12)не удается выделить память: AH00159: fork: не удается fork новый процесс [Sun.

Что творится с серваком? Несколько лет работал а тут такое. Раза с 20 зашел по ssh на все команды fork: Cannot allocate memory, но если долго пытаться то команды выполняются. Свободной памяти много. В чем проблема? Может быть в физическом повреждении RAM?

OS, ядро, dmesg, сколько процессов ? Может баг в ядре который ребутом полечится


А процессов сколько?

Debian 7.11 3.2.0-4-amd64 процессов 146 в dmesg чисто, ребут был.

/proc/meminfo и /proc/sys/vm/overcommit_memory покажи

3.2.0 - както стремно (уже 84 багфикса было для 3.2 ветки).

А что в /proc/slabinfo ? И сколько всего потоков ?


у тебя что-то из лимитных вещей закончилось. Возможно дескрипторы или что-то подобное.

Dark_SavanT ★★★★★ ( 13.02.17 20:41:47 )
Последнее исправление: Dark_SavanT 13.02.17 20:42:03 (всего исправлений: 1)


Окей, а теперь покажи пожалуйста ulimit -a


Хм, тоже вроде никакого криминала(у меня например, некоторые параметры даже ниже по дефолту). Ну и наконец выхлоп ps aux на какой-нибудь pastebin бы не помешал

Update: вот тут чуть подробнее расписали возможные проблемы

Pinkbyte ★★★★★ ( 13.02.17 21:02:13 )
Последнее исправление: Pinkbyte 13.02.17 21:05:19 (всего исправлений: 1)

Ищите процесс (процессы) которые запросили большое количество RAM (можно в top Shift+M и смотреть у кого большой VIRT)

Вообще не интересно самый жирный это


И кто у нас 21776? Чинится ли всё, если его прибить?

Насколько я понял 21776 процесс запросил 36G RAM

Да действительно прибил 21776 и все наладилось. Но вот что странно запросил он 35.0g а использовал всего 2.5g. Притом своп пустой на запросы памяти сыпется Cannot allocate memory. Почему?


Есть подозрение что дело в overcommit и бажном процессе, который сделал malloc на overдохрена памяти

top - 21:32:03 up 5:36, 2 users, load average: 0.14, 0.19, 0.18
Tasks: 138 total, 1 running, 137 sleeping, 0 stopped, 0 zombie
%Cpu(s): 13.5 us, 0.8 sy, 0.0 ni, 85.3 id, 0.2 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem: 32878740 total, 10601464 used, 22277276 free, 62572 buffers
KiB Swap: 16768892 total, 0 used, 16768892 free, 6246996 cached


Это ты шифруешься так, что ли? Я понимаю там логины пользователей еще скрывать, но что у тебя такого сверхсекретного в именах процессов? :-)

И еще, ты так и не ответил что именно за процесс был под pid 21776.

Логично. Процесс кривой но нужный, раньше столько МЕМа не заказывал.

Это что бы холивар не разводить. Java это была java :)))


Не дай бохъ узнают, шо java (подкодит по кол-ву символов) крутит. ;)


Вариантов тут немного: либо фиксить поведение процесса(патчить, писать багрепорты и/или накатывать новую версию), либо переключать overcommit в режим 2.

ОСТОРОЖНО: неправильные настройки overcommit могут к чертям сломать тебе систему, пока не откатишь в зад. Например, у меня при дефолтных 50% overcommit_ratio на десктопе с 4G RAM напрочь отказывались запускаться ЛЮБЫЕ приложения на java(даже hello world).

Update: гы, как в воду глядел, начал писать коммент до того как увидел инфу про java :)

Крути настройки GC в java, ну или overcommit, но осторожно и желательно с локальным доступом(хотя SSH по идее прибивается OOM-Killer-ом в сааамую последнюю очередь, так что. )

Я использую Ubuntu 14.04. Недавно, когда я вхожу через SSH с моим пользователем с привилегиями sudo, каждая команда, которую я запускаю, приводит к ошибке «Не удается выделить память». Вот несколько, которые я попробовал на своей консоли

Даже если я попытаюсь, sudo reboot now я получу вышеуказанную ошибку, поэтому я не знаю, что еще я могу попытаться разблокировать мой экземпляр. Хост DigitalOcean, если это имеет значение.

Редактировать: В соответствии с ответом / предложением, приведенным здесь, вывод «бесплатно»

Я бы посоветовал перезагрузить дроплет (просто перейдите на панель управления клиентом и выберите «Перезагрузка»), ssh а затем запустите top или htop . Следите за использованием памяти и посмотрите, какой процесс использует всю память. Оттуда попробуйте либо

    Уничтожение / удаление неисправной программы / процесса

Предложения по предотвращению повторения проблемы

  • Что-то хорошее, что нужно сделать, это добавить память подкачки , так как она выделяет больше памяти, если у вас заканчивается.
  • Всякий раз, когда вы устанавливаете программы, убедитесь, что вы настроили их правильно, чтобы они не работали непреднамеренным образом (например, расходует память)
  • После того, как вы каждый раз добавляете пакет или в основном что-то новое, проверяете с помощью htop или top чтобы увидеть, сколько памяти вы используете с текущими программами. Если вы заметили, что используете почти все, попробуйте очистить некоторые, пройдя и удалив ненужные программы / процессы.
  • Если есть что-то, что запускается автоматически (помимо системных процессов, конечно!), Которое вы не можете распознать или хотите запустить автоматически, удалите его! Но всегда проверяйте, что представляет собой процесс, прежде чем убивать / удалять его, поскольку это может быть важно для процедур загрузки, системных функций и т. Д.

Чтобы выйти из этого состояния без перезагрузки, вы можете вручную запустить OOM killer следующим образом:

Ссылка

Есть ли у вас документация, поддерживающая эти команды? Почему бы просто sudo sysctl -w vm.oom_kill_allocating_task=1 или постоянно /etc/sysctl.conf . Не похоже, что это будет иметь значение, система не достигает фактического состояния OOM, если это происходит в состоянии покоя, потому что ни один процесс не пытается выделить память и никакие дополнительные процессы не могут быть запущены. И полуотносительно, но вы не сможете использовать sudo или sysctl один раз в этом состоянии. Это сработало для меня. Не знаю как, все равно. Я даже не мог бежать, sudo reboot прежде чем запустить это. Благодарность!

В дополнение к принятому ответу необходимо учесть еще одну вещь: ваша система может исчерпать файловые дескрипторы или даже буферы сокетов и все еще иметь много памяти, одновременно выдавая ту же ошибку. Это особенно верно, если общий хостинг налагает ограничения такого характера. В системах OpenVZ смотрите содержимое

Это даст вам в самом правом столбце первые переполнения. Если это так, либо перейдите к более крупному пакету хостинга, либо выследите наиболее вероятного виновника: базу данных mysql или mariadb, которая может, в случае неисправного приложения PHP, пропускать файл до сотни в секунду.

Это также может произойти, если на вашем веб-сервере ssh открыт для доступа в Интернет и принимает логины с именами пользователей и паролями: даже если у вас запущен fail2ban, возможно, вы столкнулись с попыткой разбить распределенный словарь при попытке, которая также потребляет много ресурсов.

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

Модератор: SLEDopit

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

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

Есть некий сервер на 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 было найдено следующее:

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

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

Всем спасибо за внимание!

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

Ну и nginx можно поставить перед apache, если религия позволяет.

Ну и nginx можно поставить перед apache, если религия позволяет.

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

Всем большое спасибо за ответы!
Вероятно от организации схемы "фронтэнд-бэкэнд" здесь не уйти. Посещаемость растет медленно, но верно, поэтому варианты типа "отключить неиспользуемое" принесут недолгое облегчение. Пойду изучать мануалы. Ставил как то себе ентот ужос CentOS. ИМХО попробуйте радикальный вариант FreeBSD и даже без иксов. Плюсы - то что сами в запуск в конфиги, например: rc.conf пропишите то стартовать и будет. Соответственно и памяти станет придостаточно
Ставил как то себе ентот ужос CentOS. ИМХО попробуйте радикальный вариант FreeBSD и даже без иксов. Плюсы - то что сами в запуск в конфиги, например: rc.conf пропишите то стартовать и будет. Соответственно и памяти станет придостаточно
Очень сомневаюсь что у топикстартера сервер с иксами
И чтоже это по вашему получается, в Centos нельзя настроить запуск демонов? AMD 4600+, 4Gb DDRII-800, GF GTS250 512Mb, HDD 750Gb WD Ставил как то себе ентот ужос CentOS. ИМХО попробуйте радикальный вариант FreeBSD и даже без иксов. Плюсы - то что сами в запуск в конфиги, например: rc.conf пропишите то стартовать и будет. Соответственно и памяти станет придостаточно

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

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

Когда я запускаю любую команду в bash shell, она возвращается:

Затем я попробовал отладить утечку памяти с помощью команды ps . Он возвращается:

Как отлаживать? В чем основная проблема?

4 ответа

У меня есть 3 Rails приложения, которые все используют одну и ту же кодовую базу. 2/3 приложений работают нормально, но одно из них выдает мне эту ошибку: не удалось fork новый процесс для подключения: не удается выделить память При попытке взглянуть на журналы Postgres, это немного более.

Я также столкнулся с этой проблемой с моим рабочим столом Ubuntu 14.04.

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

Значение по умолчанию max PID number равно 32768, чтобы просмотреть это значение, выполните команду

Чтобы изменить максимальное число pid, выполните

В моем сценарии основная причина заключалась в том, что один java prcocess породил 18K+ потоков( в linux kernel поток по сути является процессом), чтобы узнать количество потоков каждого процесса, запустите

Возможно, сначала вы захотите проверить использование системной памяти, чтобы убедиться, что осталось достаточно свободной памяти.

Если нет, что в моем случае, пожалуйста, проверьте свой ulimit, набрав ulimit -a , чтобы узнать, достигли ли вы предела максимального количества открытых файлов (в основном вызванного некоторыми определенными процессами, которые занимают много файловых дескрипторов). В этом случае настройка ulimit решит вашу проблему.

У меня была та же проблема. В моем случае, узнав о деталях памяти с помощью " proc/meminfo ", я обнаружил PIDs, что они использовали много CPU, а память с " TOP ".After, я проверил, как долго они работали с" ps-o etime= -p "PID" ". Затем я убиваю PIDs с помощью "убить -9 PID".

Похожие вопросы:

У меня есть сервер apache с 32 GB из RAM. Когда я запускаю сервер и выполняю top, чтобы увидеть ресурсы, он показывает мне, что CPU находится на уровне 95 процентов. Это не нормальное поведение и.

У меня есть 3 Rails приложения, которые все используют одну и ту же кодовую базу. 2/3 приложений работают нормально, но одно из них выдает мне эту ошибку: не удалось fork новый процесс для.

Я получаю эту ошибку в файле журнала моего сервера. [Sun Jan 29 00:22:43.570300 2017] [mpm_prefork:error] [pid 1205] (12)не удается выделить память: AH00159: fork: не удается fork новый процесс [Sun.

Читайте также: