Почему ошибка out of memory

img-Oshibka-pamyati.png

Всем здравия!

В сегодняшней заметке хочу остановиться на одной довольно коварной ошибке («Out of memory…»), которая иногда возникает при запуске программ и игр (лично я чаще всего с этим сталкивался при попытке запустить: Mortal Kombat, Minecraft, Google Chrome, Utorrent и др.).

Вообще, данная ошибка говорит о том, что Windows не может выделить для конкретного приложения нужный ему объем памяти. Например, это часто бывает, когда свободного объема ОЗУ слишком мало, а приложению требуется значительно больше.

Впрочем, причина ошибки может быть и в некорректной работе самого ПО…😡 (и тогда будет не важно, сколько у вас свободной ОЗУ).

Можно ли с этим что-то сделать?

Смотря какое ПО вам нужно запустить, и в чем причина ошибки. В ряде случаев проблему удается устранить достаточно быстро, неск. моих рекомендаций ниже в помощь. 👇

img-Out-of-Memory.-Primer-oshibki-opisanie-mozhet-neskolko-otlichatsya.png

Out of Memory. Пример ошибки (описание может несколько отличаться)

*

Содержание статьи

    ускорение ПК

  • 1 Рекомендации
    • 1.1 Первые действия
    • 1.2 Расширение файла подкачки
    • 1.3 Проверка (диагностика) ОЗУ
    • 1.4 Проверка работы приложения с др. версией ОС Windows
    • 1.5 Апгрейд ПК/ноутбука: увел. ОЗУ
  •  → Задать вопрос | дополнить 

Рекомендации

Первые действия

  1. 👉 Начну с банального: перезагрузите ПК; после закройте все «лишние» приложения, которые в данный момент не нужны (прим.: часто в 📌автозагрузке находятся десятки программ: плееры, редакторы, торренты и т.д.);
  2. 👉 Проверьте требования игры (приложения): сколько ОЗУ требуется? Если в миним. сист. требованиях указано 4 ГБ, а у вас ПК с 2 ГБ — то проблема очевидна! В этом случае можно попробовать закрыть всё «что можно», увел. файл подкачки (об этом ниже), установить др. версию Windows (миним. сборку);

    img-Teh.-trebovaniya-k-odnoy-iz-kompyuternyih-igr.png

    Тех. требования к одной из компьютерных игр

  3. 👉 Кстати, если вопрос касается игры: снизьте настройки графики, установите всё на минимум. При возможности переустановите приложение (игру);

    img-Nastroyki-grafiki-dlya-WOW-Legion.png

    Настройки графики для WOW Legion (кликабельно)

  4. 👉 Если проблема возникла с браузером (например, с Chrome): 📌почистите кэш, обновите его, и закройте не используемые вкладки. Как вариант, можно также запустить другой браузер для работы (есть спец. 📌браузеры для слабых ПК);

    img-Zakryivaem-chast-vkladok-Chrome.png

    Закрываем часть вкладок — Chrome

  5. 👉 Неплохо было бы 📌очистить свою ОС Windows от мусора и битых файлов. Проверить, что на диске есть свободное место (по крайней мере 15+ ГБ! Обратите внимание на скрин ниже: в «Моем компьютере» на диске не должна гореть красная полосочка…);

    Места стало совсем мало...

    Места стало совсем мало…

  6. 👉 Если наряду с этой ошибкой всплывают и другие (например, синий экран), — желательно их сфотографировать (записать). Это может помочь в диагностике и поиске причин.

*

Расширение файла подкачки

Файл подкачки — это файл на сист. разделе диска, который ОС Windows использует, когда ей не хватает ОЗУ (т.е. если у вас 4 ГБ памяти, а программе нужно 8 ГБ — то Windows «подсунет» ей 4 ГБ реальных, и 4 ГБ с диска. Таким образом ошибка не появиться. // Это грубое объяснение, на самом деле все сложнее… 🙂).

👉 В общем, для настройки файла подкачки требуется:

  1. открыть 📌свойства системы (Win+R, и команда sysdm.cpl);
  2. перейти во вкладку «Дополнительно / Быстродействие»;
  3. затем перейти в раздел «Дополнительно / Виртуальная память» — нажать по кнопке «Изменить»;

    img-Virtualnaya-pamyat-svoystva-Windows.png

    Виртуальная память — свойства Windows

  4. далее останется задать требуемый объем. Обычно Windows сама подсказывает, какой объем ей нужен, можете поставить просто на усмотрение системы;
  5. перезагрузите компьютер, и проверьте работу «проблемного» приложения. Если снова возникнет ошибка — можно попробовать еще раз вручную увел. файл подкачки…

*

Проверка (диагностика) ОЗУ

В некоторых случаях ошибка «Out of memory» может быть связана с тех. неисправностью самой плашки ОЗУ. Чтобы исключить эту проблему — рекомендовал бы провести небольшое тестирование плашек, благо, что на это потребуется 3-5 мин. времени (и инструмент проверки есть в самой ОС Windows). О том, как его запустить — см. ссылочку ниже. 👇

Тест ОЗУ (RAM): проверка оперативной памяти на ошибки

*

Проверка работы приложения с др. версией ОС Windows

Причиной появл. данной ошибки нередко также бывает наличие сист. ошибок в ОС Windows (особенно, при использовании не офиц. дистрибутивов от «народных умельцев», где нередко отключена половина служб).

В этом плане стоило бы проверить работу «проблемного» приложения при запуске в другой ОС Windows — для этого даже не обязательно переустанавливать текущую версию Windows — можно воспользоваться ОС, запускаемой с LiveCD диска.

Подборка LiveCD накопителе доступна по ссылке ниже. 👇

LiveCD для аварийного восстановления Windows

*

Апгрейд ПК/ноутбука: увел. ОЗУ

Если все предыдущее не дело результатов — было бы неплохо для диагностики добавить еще одну плашку ОЗУ, и проверить, как ПК будет работать с большим кол-вом памяти.

Дешевые плашки можно найти в 📌китайских онлайн-магазинах (если есть знакомый товарищ — можно попросить у него бесплатно 🙂).

Пример добавления плашки ОЗУ показан в одной из моих предыдущих заметок. Если не знаете расшифровку основных параметров плашки (а именно это и нужно, чтобы правильно подобрать новую) — 📌📌см. это.

Как увеличить оперативную память на ноутбуке (ставим вторую планку ОЗУ)

*

Если вы решили вопрос как-то иначе — пожалуйста, дайте наводку в комментариях. Заранее благодарю.

👋

donate

dzen-ya

Полезный софт:

  • видеомонтаж
  • Видео-Монтаж
  • Отличное ПО для создания своих первых видеороликов (все действия идут по шагам!).
    Видео сделает даже новичок!

  • утилита для оптимизации
  • Ускоритель компьютера
  • Программа для очистки Windows от «мусора» (удаляет временные файлы, ускоряет систему, оптимизирует реестр).

Многие пользователи ПК во время работы с какой-либо программой могут столкнуться с «вылетом» указанной программы, и появившимся сообщением «Out of memory». Возникшая проблема может иметь множество причин, начиная от банального недостатка памяти на пользовательском ПК, и заканчивая некорректной работой с памятью какой-либо программы.

  • Причины появления дисфункции
  • Как исправить ошибку «Out of memory»
  • Заключение

Ошибка out of memory

Причины появления дисфункции

Сообщение «Out of memory» (в переводе дословно «вне памяти», или «недостаточно памяти») обычно возникает при недостатке памяти на пользовательском компьютере. В частности же, в появлении данной ошибки «виновен» следующий набор факторов:

  • Недостаток памяти RAM на вашем ПК (рабочей памяти, планки которой установлены на материнской плате вашего компьютера). Если на вашем компьютере установлен всего 1 гигабайт памяти, вы будете встречаться с описываемой ошибкой довольно часто. Нормальным же ныне считается наличие на компьютере 4 гигабайт памяти и выше;
  • Недостаток места на жёстком диске.

Когда вашему компьютеру не хватает физической R.A.M. памяти, он заимствует часть места на жёстком диске, и создаёт так называемую «виртуальную память». Система временно хранит в такой виртуальной памяти ту часть данных, которая не помещается в памяти обычной. Такие данные обычно хранятся в файле «pagefile.sys», размер которого может увеличиваться или уменьшаться в зависимости от специфики работы вашей ОС. Если на диске будет недостаточно места, файл «pagefile.sys» не сможет расти, и пользователь получит рассматриваемую ошибку.

  • При одновременном запуске на ПК большого количества программ, каждая из которых бронирует часть памяти ПК под свои задачи;
  • При запуск большого количества вкладок браузера. Веб-навигаторы уровня «Firefox» или «Google Chrome» способны занимать от 500 мегабайт до 1 гигабайта памяти под свой функционал, при этом число открытых вкладок и соответствующей обслуживающей памяти может быть ограничено системой. Специалисты Майрософт называют такую проблему «the desktop heap limitation» — «ограничение кучи рабочего стола»);
  • Некорректная работа с памятью ряда программ (наиболее часто это игровые программы);
  • Не оптимальный размер файла подкачки, с которым работает система.Планка памяти и датчик

Для решения указанной проблемы рекомендую сделать следующее:

  1. Перезагрузите ваш ПК, и запустите требуемую программу вновь. Возможно, что проблема имеет случайный характер, и более повторяться не будет;
  2. Перед запуском нужной программы закройте другие ненужные программы (браузер, музыкальный или видео плеер, текстовый или графический редактор, мессенджер и так далее);
  3. Если проблема возникает во время серфинга в сети, закройте всё множество вкладок вашего браузера (при наличии), оставив лишь одну или две.Много открытых вкладок

Альтернативным вариантом решения проблемы является установка соответствующего фикса от Майкрософт. Или использование расширений или дополнений для браузера уровня «The Great Suspender» для «Google Chrome», хорошо работающего с ненужными вкладками браузера.

  • Добавьте оперативной памяти на ваш ПК. Если у вас на компьютере установлено 1-2 гигабайта памяти, будет оптимальным довести её объём до 4 гигабайт (а для 64-битных Виндовс 7, 8 и 10 версии рекомендую 8 и более гигабайт);Планка памяти
  • Убедитесь, что на вашем жёстком диске (или SSD) достаточно свободного места. При необходимости, освободите диск от ненужных файлов;
  • Используйте инструмент командной строки BCDEdit для изменения параметров загрузки системы. Если у вас на ПК установлена Виндовс 7 и более, запустите командную строку от имени администратора на Виндовс 7 и Виндовс 10, и в ней наберите:

bcdedit/set IncreaseUserVa 3072

И нажмите на ввод, и перезагрузите ваш ПК. Функционал данной команды позволяет выделить пользовательским приложениям 3 гигабайта оперативной памяти для работы. В некоторых системах этого может быть слишком много, потому если после ввода данной команды система начала чаще сбоить, то введите в командной строке от имени администратора:

bcdedit /set IncreaseUserVa 2560 что позволит задействовать 2,5 гигабайта вместо ранее забронированных 3.

Если ситуацию этим исправить не удалось, верните настройки на состояние по умолчанию:

bcdedit /deletevalue IncreaseUserVa

  • Увеличьте объём файла подкачки. Нажмите кнопку «Пуск», в строке поиска введите sysdm.cpl и нажмите ввод. В открывшемся окне настроек системы выберите «Дополнительно» — «Быстродействие» — «Параметры» — «Дополнительно» — «Виртуальная память» — «Изменить». Снимите галочку с опции автоматического размера, поставьте галочку на «Указать размер», и поставьте исходный размер в 8192, и максимальный в 8192. Затем выберите «Задать»;

    Окно виртуальной памяти

    Установите нужный размер файла подкачки

  • Если ошибка возникает при использовании игровой программы, перейдите в её графические настройки, и выберите их минимальные значения;
  • Произведите правильную настройку «Java». Для решения проблем с игровой программой «Майнкрафт» перейдите в Панель управления Виндовс, найдите там «Java» и запустите данную среду исполнения. Нажмите на кнопку «View», затем дважды кликните на «Runtime Parametres». Введите туда –Xms256m – Xmx3072m (или больше). Xms – это минимальное выделение ОЗУ, Xmx – максимальное. Значение Xmx рекомендуют устанавливать на процентов 70-80% от общего объёма ОЗУ. Примените изменения, и перезагрузите ваш ПК.

Заключение

Ошибка «Out of memory» может иметь множество причин, связанных как с физическим недостатком памяти на ПК, так и другими детерминантами, изложенными мной выше. Для решения проблемы советую закрыть ненужные программы (вкладки браузера) на вашем компьютере (тем самым разгрузив его память), а самым эффективным инструментом является установка дополнительной планки памяти на ПК, что в большинстве случаев поможет избавиться от ошибки на вашем компьютере.

Как правило, код ошибки Out of memory появляется при запуске многих игр и программ, в частности Mortal Kombat 9, DayZ, Minecraft, After Effects, Google Chrome и даже utorrent. Почему она возникает и что делать для ее устранения? Давайте разбираться.

В переводе на русский сбой означает «недостаточно памяти», что уже толкает на некоторые решения – увеличить объем оперативной, видео памяти или освободить место на диске «C». Но срабатывает это далеко не всегда, поэтому рассмотрим еще несколько вариантов исправления ошибки.

Содержание статьи

  1. Системные требования
  2. Плохая сборка
  3. Очистка Windows
  4. Дополнительные решения для Mortal Kombat
  5. Не запускается
  6. Зависает или вылетает
  7. Проверка микрофона
  8. Чистая загрузка
  9. Сканирование на ошибки
  10. Устранение неполадок
  11. Файл подкачки
  12. Диагностика ОЗУ
  13. Редактирование реестра
  14. Комментарии пользователей

Системные требования

Удостоверьтесь, что компьютер удовлетворяет системные требования игры. Например, если для нормальной работы приложения требуется 4 ГБ оперативной памяти или 2 ГБ видео памяти, а на компьютере стоит в 2 раза меньше, то очевидно проблема в этом.

Вариантов решения здесь несколько:

  1. Выполнить апгрейд компьютера.
  2. Понизить качество игровых настроек.
  3. Закрыть все открытые программы, изменить версию Windows или оптимизировать ее, чтобы сэкономить больше ресурсов.

Плохая сборка

Работоспособность программы также зависит от сборки. В идеале если это оригинальная версия. Но как обычно бывает, используются взломанные сборки «рэпаки». В таком случае попробуйте скачать и установить другую версию.

Очистка Windows

Попробуйте удалить сбойную программу через любой деинсталлятор. Затем воспользуйтесь программой для очистки системы и исправления проблем в реестре, например, «ccleaner». После этого перезагрузите ПК и установите заново нужное приложение. Редко, но это помогает.

Дополнительные решения для Mortal Kombat

Более подробно разберем некоторые способы касающиеся игры мортал комбат 9. Поскольку чаще всего именно при запуске этой игры возникает ошибка out of memory.

Нехватка памяти и неподдерживаемое разрешение экрана

  1. Нажмите «WIN + R», введите %appdata% и щелкните «Ок».appdata
  2. Найдите папку «MKKE» и откройте файл dxdiag.txt через блокнот.
  3. Найдите строку «Dedicated Memory», укажите значение «1024» и сохраните изменения. Закройте файл.
  4. Нажмите правой мышкой по dxdiag.txt и откройте «Свойства».
  5. В графе «Атрибуты» установите галочку «Только чтение» и щелкните «Ок».

Проверьте, есть ли результат.

Не запускается

Если MK запускался только один раз после установки, то скорее всего сбились настройки.

  1. Входим в папку appdata, как это делали выше.
  2. Открываем через блокнот файл «options.ini», находим строку max_texture и после знака «=» выставляем значение «1024». Должно получиться так: max_texture = 1024.

Зависает или вылетает

  1. Заходим в папку appdata, как это делали ранее и открываем в блокноте «options.ini».
  2. Находим строку configured = false и меняем значение на «true». В итоге получится так: configured = true.
  3. Сохраняем изменения и проверяем результат.

Проверка микрофона

Mortal Kombat очень чувствителен к микрофону. Если он включен, то отключите его, выдернув провод из гнезда.

Иногда, наоборот, помогает подключение микрофона к гнезду. Особенно в случае с ноутбуками.

Чистая загрузка

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

  1. Нажмите «Windows + R», введите msconfig.msconfig
  2. Откройте вкладку «Службы», скройте службы Microsoft и выберите «Отключить все».выключение служб
  3. Затем пройдите в «Автозагрузку» и избавьтесь от сторонних приложений.чистка запуска программ
  4. Перезагрузите ОС и проверьте результат.

Сканирование на ошибки

Неполадку способны вызывать поврежденные системные файлы. Их также желательно проверить.

  1. Открываем командную строку «WIN+R — CMD».cmd
  2. Вводим sfc /scannow и жмем «Enter».scannow
  3. Если по завершении служба сообщит, что восстановление не удалось, то выполните еще одну команду — DISM /Online /Cleanup-Image /RestoreHealth.dism

После того, как все будет сделано, перезапустите ПК.

Устранение неполадок

Воспользуйтесь автоматическим средством по устранению неполадок, которое предоставляет Microsoft.

  1. Откройте панель управления через меню «Пуск» или «Поиск»панель управления.
  2. Перейдите в раздел «Устранение неполадок».устранение сбоев
  3. Нажмите по просмотру всех категорий.отображение категорий
  4. Выберите «Обслуживание системы».обслуживание
  5. Откроется окно с мастером диагностики, выполните процедуру до конца и перезапуститесь.

Файл подкачки

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

Как это сделать:

  1. Запускаем окно «Выполнить» и вводим «sysdm.cpl».sysdm
  2. Перемещаемся в «Дополнительно» и в разделе «Быстродействие» щелкаем кнопку «Параметры».параметры быстродействия
  3. Снова переходим в «Дополнительно» и в разделе «Виртуальная» щелкаем «Изменить».изменяем виртуалку
  4. Выделите диск с Windows и активируйте пункт «Указать размер». В обеих строках введите значение выше текущего, в моем случае это будет «4096».вручную указываем размер файла подкачки

Также можно позволить ОС автоматически выбирать его размер. В большинстве случаев это работает еще лучше.

Диагностика ОЗУ

Иногда, out of memory возникает из-за поврежденной оперативной памяти. Рекомендую провести диагностику.

Существуют два способа, как это можно сделать.

  1. Пользователям Windows 10 и 8 доступно штатное средство. Запускается через «WIN + R — mdsched.exe».mdsched
  2. Более универсальным методом является диагностика через утилиту «Memtest86».

Однако эти программы не всегда выявляют дефекты. Обнаружить их получается вынув одну планку ОЗУ или переставив ее в другой слот.

Редактирование реестра

Добиться нормальной работы ОС можно через правку реестра. Если вы решитесь на это, будьте осторожны, неправильные действия могут вывести операционку из строя.

  1. В поиске введите «regedit» и откройте редактор.редактор реестра
  2. Пройдите в ветку HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerSubSystems
  3. Выберите «Windows» и следом «Изменить».редактируем реестр
  4. Найдите запись SharedSection, увеличьте второе и третье значение.sharedsection

К примеру, SharedSection=aaaa,bbbb,cccc

Для x32 разрядной системы меняем следующие значения:

  1. bbbb на 12288
  2. cccc на 1024

Для x64:

  1. bbbb на 20480
  2. cccc на 1024

Нажмите «Ок» и перезагрузите компьютер.

Бывает, что ничего не помогает устранить ошибку. В таких случаях ничего не остается, кроме переустановки операционки или ее обновлении.

Ошибка «Out of Memory» обычно появляется, когда на компьютере запущено много программ, использующих ресурсы, доступные для компьютера. Компьютерная память или ОЗУ (оперативное запоминающее устройство) используется компьютером для быстрого хранения данных для их обработки.

Структура статьи

  • 1 Когда появляется эта ошибка?
  • 2 Причина ошибки «Out of Memory»
  • 3 Как исправить ошибку «Out of Memory»
  • 4 Чтобы избежать проблем, тщательно следуйте этим инструкциям.
  • 5
    Отсюда, следуйте этим шагам в зависимости от вашей операционной системы

Когда появляется эта ошибка?

Как я уже отмечал выше, запуск сразу нескольких программ может перегрузить объем доступной свободной памяти, что приведет к ошибке «Out of Memory». Это может случиться как с новыми программами, так и с уже запущенными на компьютере программами. Иногда это может произойти, независимо от объема доступной свободной памяти.

Причина этих ошибок немного сложнее. Подсистема WIN32 Windows имеет ограниченный объем доступной памяти. Если память в куче рабочих столов подсистемы WIN32 используется. Windows может выдавать сообщение об ошибке «Out of Memory».

Компьютеры, работающие не так, как операционные системы Microsoft Windows, не слишком уязвимы. Эта проблема в основном существует для пользователей Windows NT 3.5 и Windows NT 3.1

Как исправить ошибку «Out of Memory»

Чтобы исправить эту проблему, вам необходимо отредактировать свой реестр Windows. Редактирование реестра является рискованным занятием. Действовать нужно с осторожностью, и только строго по инструкции:

  • Резервное копирование реестра — так что вы можете восстановить его позже, если что-то пойдет не так.
  • Нажмите здесь, чтобы узнать, как создать резервную копию и восстановить реестр.

Чтобы избежать проблем, тщательно следуйте этим инструкциям.

  • Увеличьте размер кучи рабочего стола, чтобы исправить эту проблему.
  • Запустите редактор реестра, открыв диалоговое окно RUN с помощью сочетания клавиш Windows_Key + R или из меню «Пуск». В диалоговом окне RUN введите regedit для запуска Regedt32.exe.
  • Из поддерева HKEY_LOCAL_MACHINE,
    Перейдите к следующему разделу:
  • System CurrentControlSet Control Session Manager SubSystems
  • Выберите значение Windows.
  • Выберите «Строка» в меню «Правка».
  • Увеличить параметр SharedSection


Отсюда, следуйте этим шагам в зависимости от вашей операционной системы

Для Windows NT:

  • SharedSection используется для определения размера системы и рабочего стола, он использует следующие параметры
  • SharedSection = XXXX, YYYY
  • Добавить «, 256» или «, 512» после номера yyyy.

Для Windows 2000, Windows XP и Windows Server 2003:

  • SharedSection используется для определения размера системы и рабочего стола, он использует следующие параметры
  • SharedSection = XXXX, YYYY, ZZZZ

Для 32-разрядных операционных систем

  • Увеличьте значение yyyy до «12288» и увеличьте значение zzzz до «1024».

Для 64-разрядных операционных систем

  • Увеличьте значение yyyy до «20480»; Увеличьте значение zzzz до «1024».

Есть свой вариант быстрого решения ошибки «Out of Memory»? Пишите его в форму комментариев к этой статье, и если ваш вариант окажется полезным, мы обязательно дополним руководство.

Содержание

  1. Как исправить ошибку «Out of Memory»
  2. Когда появляется эта ошибка?
  3. Причина ошибки «Out of Memory»
  4. Как исправить ошибку «Out of Memory»
  5. Чтобы избежать проблем, тщательно следуйте этим инструкциям.
  6. Отсюда, следуйте этим шагам в зависимости от вашей операционной системы
  7. Как создать торрент windows 10 x64 bit? Раздать торрент в локальной сети. Windows ran out of memory.
  8. UTorrent: windows ran out of memory, unable to allocate xxxxxx bytes
  9. Причины появления дисфункции
  10. Как исправить ошибку «Out of memory»
  11. Заключение
  12. Windows run out of memory unable to allocate 131076 bytes
  13. Windows run out of memory unable to allocate 131076 bytes
  14. Разбираем ошибку Out of memory и самостоятельно исправляем
  15. Системные требования
  16. Плохая сборка
  17. Очистка Windows
  18. Дополнительные решения для Mortal Kombat
  19. Не запускается
  20. Зависает или вылетает
  21. Проверка микрофона
  22. Чистая загрузка
  23. Сканирование на ошибки
  24. Устранение неполадок
  25. Файл подкачки
  26. Диагностика ОЗУ
  27. Редактирование реестра
  28. ОШИБКА: «Out of memory»
  29. Ошибка: out of memory allocating 65536 bytes
  30. Unable to allocate memory | After Effects
  31. Issue
  32. Workaround

Как исправить ошибку «Out of Memory»

Operativnayapamyat2

Ошибка «Out of Memory» обычно появляется, когда на компьютере запущено много программ, использующих ресурсы, доступные для компьютера. Компьютерная память или ОЗУ (оперативное запоминающее устройство) используется компьютером для быстрого хранения данных для их обработки.

Когда появляется эта ошибка?

Как я уже отмечал выше, запуск сразу нескольких программ может перегрузить объем доступной свободной памяти, что приведет к ошибке «Out of Memory». Это может случиться как с новыми программами, так и с уже запущенными на компьютере программами. Иногда это может произойти, независимо от объема доступной свободной памяти.

Причина ошибки «Out of Memory»

Причина этих ошибок немного сложнее. Подсистема WIN32 Windows имеет ограниченный объем доступной памяти. Если память в куче рабочих столов подсистемы WIN32 используется. Windows может выдавать сообщение об ошибке «Out of Memory».

Компьютеры, работающие не так, как операционные системы Microsoft Windows, не слишком уязвимы. Эта проблема в основном существует для пользователей Windows NT 3.5 и Windows NT 3.1

Как исправить ошибку «Out of Memory»

Чтобы исправить эту проблему, вам необходимо отредактировать свой реестр Windows. Редактирование реестра является рискованным занятием. Действовать нужно с осторожностью, и только строго по инструкции:

Чтобы избежать проблем, тщательно следуйте этим инструкциям.

Отсюда, следуйте этим шагам в зависимости от вашей операционной системы

Для Windows NT:

Для Windows 2000, Windows XP и Windows Server 2003:

Для 32-разрядных операционных систем

Для 64-разрядных операционных систем

Есть свой вариант быстрого решения ошибки «Out of Memory»? Пишите его в форму комментариев к этой статье, и если ваш вариант окажется полезным, мы обязательно дополним руководство.

Источник

Как создать торрент windows 10 x64 bit? Раздать торрент в локальной сети. Windows ran out of memory.

torrent

Как передать много больших файлов через торрент?

Сейчас наиболее популярный клиент (программа) торрента: utorrent, но вот поддержка x64 битной версии уже не работает, а OS Windows постоянно обновляется и выходят другие версии виндовс. Клиент торрента последней версии создан для x32 версии, поэтому при создании большого торрента у вас могут появиться ошибки:

Windows ran out of memory. Unable to allocate 32768000 bytes.
Please close some application and press OK.

Это случается при ошибке разрядности и использовании оперативной памяти клиентом торрента. Что бы решить данную проблему, вам потребуется скачать старый-добрый клиент bittorrent x64, x32 (для обоих версий): bittorrent.exe (83 Загрузки) – данная версия очень старая, но она работает в x64 и в x32 (x86) версии виндовс. И позволяет вам создавать торренты с раздачей.

torrent 2

Почему не идёт отдача (раздача торрента)?

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

Источник

UTorrent: windows ran out of memory, unable to allocate xxxxxx bytes

tickAllowed memory size of 134217728 bytes exhausted (tried to allocate 46704001 bytes)
Вот такая проблема возникает при загрузке изображения, проблему устранил, но таким путём, которые.

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 1572864 bytes)
Доброго времени суток уважаемые участники форума. Не так давно взялся за тех. поддержку сайта.

tickCannot allocate memory
В общем, пишу программу под android. Сначала все было ОК, а потом, после того как добавил iText.

The browser could not allocate enough memory for the webgl content
Привет! Как бороться с этой ошибкой: The browser could not allocate enough memory for the webgl.

Ошибка: out of memory allocating 65536 bytes
ТО есть, ребята. компилирую прогу, 4 подключаемых файлы суть массивы символов, реально большие.

tickNot enough memory (67108864 bytes needed)![DefaultErrorInsufficientMemoryCallback]
Fatal Error Not enough memory (67108864 bytes needed)!. Что это значит? Вылетела во время.

Источник

Многие пользователи ПК во время работы с какой-либо программой могут столкнуться с «вылетом» указанной программы, и появившимся сообщением «Out of memory». Возникшая проблема может иметь множество причин, начиная от банального недостатка памяти на пользовательском ПК, и заканчивая некорректной работой с памятью какой-либо программы.

11

Причины появления дисфункции

Сообщение «Out of memory» (в переводе дословно «вне памяти», или «недостаточно памяти») обычно возникает при недостатке памяти на пользовательском компьютере. В частности же, в появлении данной ошибки «виновен» следующий набор факторов:

Когда вашему компьютеру не хватает физической R.A.M. памяти, он заимствует часть места на жёстком диске, и создаёт так называемую «виртуальную память». Система временно хранит в такой виртуальной памяти ту часть данных, которая не помещается в памяти обычной. Такие данные обычно хранятся в файле «pagefile.sys», размер которого может увеличиваться или уменьшаться в зависимости от специфики работы вашей ОС. Если на диске будет недостаточно места, файл «pagefile.sys» не сможет расти, и пользователь получит рассматриваемую ошибку.

Как исправить ошибку «Out of memory»

Для решения указанной проблемы рекомендую сделать следующее:

Альтернативным вариантом решения проблемы является установка соответствующего фикса от Майкрософт. Или использование расширений или дополнений для браузера уровня «The Great Suspender» для «Google Chrome», хорошо работающего с ненужными вкладками браузера.

bcdedit/set IncreaseUserVa 3072

И нажмите на ввод, и перезагрузите ваш ПК. Функционал данной команды позволяет выделить пользовательским приложениям 3 гигабайта оперативной памяти для работы. В некоторых системах этого может быть слишком много, потому если после ввода данной команды система начала чаще сбоить, то введите в командной строке от имени администратора:

bcdedit /set IncreaseUserVa 2560 — что позволит задействовать 2,5 гигабайта вместо ранее забронированных 3.

Если ситуацию этим исправить не удалось, верните настройки на состояние по умолчанию:

bcdedit /deletevalue IncreaseUserVa

16 2

Установите нужный размер файла подкачки

Заключение

Ошибка «Out of memory» может иметь множество причин, связанных как с физическим недостатком памяти на ПК, так и другими детерминантами, изложенными мной выше. Для решения проблемы советую закрыть ненужные программы (вкладки браузера) на вашем компьютере (тем самым разгрузив его память), а самым эффективным инструментом является установка дополнительной планки памяти на ПК, что в большинстве случаев поможет избавиться от ошибки на вашем компьютере.

Источник

Windows run out of memory unable to allocate 131076 bytes

Windows run out of memory unable to allocate 131076 bytes

Сообщения: 35936
Благодарности: 6473

Сообщения: 44
Благодарности: 1

Сообщения: 8628
Благодарности: 2126

Сообщения: 44
Благодарности: 1

Тут возможно отмечать полезные сообщения. А бесполезные невозможно, жаль.

В предыдущем посте я ясно выразился, что файл подкачки размером 64 Гб ну никак не влезет в 12 Гб свободного места на SSD.

Сообщения: 51908
Благодарности: 14931

Сообщения: 44
Благодарности: 1

Сообщения: 51908
Благодарности: 14931

Разбираем ошибку Out of memory и самостоятельно исправляем

Как правило, код ошибки Out of memory появляется при запуске многих игр и программ, в частности Mortal Kombat 9, DayZ, Minecraft, After Effects, Google Chrome и даже utorrent. Почему она возникает и что делать для ее устранения? Давайте разбираться.

В переводе на русский сбой означает «недостаточно памяти», что уже толкает на некоторые решения – увеличить объем оперативной, видео памяти или освободить место на диске «C». Но срабатывает это далеко не всегда, поэтому рассмотрим еще несколько вариантов исправления ошибки.

Системные требования

Удостоверьтесь, что компьютер удовлетворяет системные требования игры. Например, если для нормальной работы приложения требуется 4 ГБ оперативной памяти или 2 ГБ видео памяти, а на компьютере стоит в 2 раза меньше, то очевидно проблема в этом.

Вариантов решения здесь несколько:

Плохая сборка

Работоспособность программы также зависит от сборки. В идеале если это оригинальная версия. Но как обычно бывает, используются взломанные сборки «рэпаки». В таком случае попробуйте скачать и установить другую версию.

Очистка Windows

Попробуйте удалить сбойную программу через любой деинсталлятор. Затем воспользуйтесь программой для очистки системы и исправления проблем в реестре, например, «ccleaner». После этого перезагрузите ПК и установите заново нужное приложение. Редко, но это помогает.

Дополнительные решения для Mortal Kombat

Более подробно разберем некоторые способы касающиеся игры мортал комбат 9. Поскольку чаще всего именно при запуске этой игры возникает ошибка out of memory.

Нехватка памяти и неподдерживаемое разрешение экрана

Проверьте, есть ли результат.

Не запускается

Если MK запускался только один раз после установки, то скорее всего сбились настройки.

Зависает или вылетает

Проверка микрофона

Mortal Kombat очень чувствителен к микрофону. Если он включен, то отключите его, выдернув провод из гнезда.

Иногда, наоборот, помогает подключение микрофона к гнезду. Особенно в случае с ноутбуками.

Чистая загрузка

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

Сканирование на ошибки

Неполадку способны вызывать поврежденные системные файлы. Их также желательно проверить.

После того, как все будет сделано, перезапустите ПК.

Устранение неполадок

Воспользуйтесь автоматическим средством по устранению неполадок, которое предоставляет Microsoft.

Файл подкачки

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

Также можно позволить ОС автоматически выбирать его размер. В большинстве случаев это работает еще лучше.

Диагностика ОЗУ

Иногда, out of memory возникает из-за поврежденной оперативной памяти. Рекомендую провести диагностику.

Существуют два способа, как это можно сделать.

Однако эти программы не всегда выявляют дефекты. Обнаружить их получается вынув одну планку ОЗУ или переставив ее в другой слот.

Редактирование реестра

Добиться нормальной работы ОС можно через правку реестра. Если вы решитесь на это, будьте осторожны, неправильные действия могут вывести операционку из строя.

К примеру, SharedSection=aaaa,bbbb,cccc

Для x32 разрядной системы меняем следующие значения:

Для x64:

Нажмите «Ок» и перезагрузите компьютер.

Бывает, что ничего не помогает устранить ошибку. В таких случаях ничего не остается, кроме переустановки операционки или ее обновлении.

ОШИБКА: «Out of memory»

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

Проблема состоит в том, что ОС Windows не умеет выделять приложениям столько памяти, сколько имеется в свободном ресурсе. Следовательно, даже если ваш ПК имеет очень большой объем свободной оперативной памяти, то в работе вы все равно можете столкнуться с данным сообщением об ошибке. Актуальный занятый объём ОЗУ из общего выделенного для приложения всегда отображается в главном окне программы.

SocialKit при запуске анализирует разрядность операционной системы Windows. Если обнаруживается возможность расширенного доступа к памяти, то программа автоматически переводится в режим расширенного доступа к ОЗУ, что дает существенно большие возможности в резервировании памяти для тех или иных операций. Это позволит больше нагружать программу и реже сталкиваться с ошибкой «Out of memory».

Настройки, отвечающие за управление режимом доступа к памяти находятся на закладке «Эксперт» (1 и 2). По умолчанию они выставлены так, чтобы программа сама определяла возможность расширенного доступа к ОЗУ при запуске и переводила программу в соответствующий режим. Следовательно, если установлена отметка в поле 2, то в поле 1 будет отражен текущий режим работы приложения. Если вы снимите отметку в поле 2, то отметка в поле 1 выставляться автоматически больше не будет. Вместо этого будет сохранён пользовательский выбор. Соответственно, при установленной отметке в поле 1 программа будет считать, что работа в расширенном режиме с памятью возможна и наоборот, если отметка отсутствует.

Ниже представлены два примера, наглядно демонстрирующие преимущество работы с поддержкой расширенного доступа к памяти.

На втором скриншоте открыто сразу несколько окон с визуальными списками, в которых находится в общей сумме более 14 млн. профилей. При этом параллельно работает несколько задач и сообщения об ошибке нет, т.к. примерно 3% ОЗУ еще доступно для распределения.

Преимущества очевидны, но следует, все же, понимать, что даже в расширенном режиме доступа к памяти программа может упереться в установленный лимит и в этой ситуации будет выдано искомое сообщение об ошибке. Если вы столкнулись с этим, то необходимо завершить работу всех задач и перезапустить программу. В дальнейшем следите за индикатором в главном окне и старайтесь не использовать выделенный объём ОЗУ больше, чем на 95%, чтобы всегда оставался какой-то объём памяти для корректного выполнения поточных задач.

Ошибка: out of memory allocating 65536 bytes

ТО есть, ребята. компилирую прогу, 4 подключаемых файлы суть массивы символов, реально большие. Такая вот высвечивается, компилятор gcc (IDE DEV C++). Какой-то памяти не хватает.

Что делать? От безысходности залез даже на какой-то англоязычный форум, хе-хе.

Там чел тоже спрашивал за эту проблему. И вот что я выудил:

Re:cc1plus.exe: out of memory allocating 65356 bytes
You can increase the size of your virtual memory in the system.

То есть первое предложение- это проблема (как у меня), а вторым предложением ему советуют увеличить размер оперативной памяти.
Если всерьёз отнестись к моему ПЕРЕВОДУ, то как мне увеличить размер виртуальной- не оперативной памяти? (последняя, ктсати, 2 гига)

Помогите, кто чем может. Спасибо.

Ошибка Packet is larger than max_allowed_packet from server configuration of 65536 bytes
Посылаю я запросы из явы в мускул. Причем большие, чуть больше 64Кб. А томкат мне в ответ.

Allowed memory size of 134217728 bytes exhausted (tried to allocate 46704001 bytes)
Вот такая проблема возникает при загрузке изображения, проблему устранил, но таким путём, которые.

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 1572864 bytes)
Доброго времени суток уважаемые участники форума. Не так давно взялся за тех. поддержку сайта.

Not enough memory (67108864 bytes needed)![DefaultErrorInsufficientMemoryCallback]
Fatal Error Not enough memory (67108864 bytes needed)!. Что это значит? Вылетела во время.

Я, возможно, обнаглел, но у меня 3 подключаемый файла cpp, размером каждый порядка. Ну что-то около 100 метров

Щас уже сделал виртуальную память 20 гигов, бесполезно.
Код нормально работает при меньших размерах байтов. При много меньших.
Оптимизировать эти файлы не удастся. Они представляют из себя вот что:

Только в этом примере 21 байт, а у меня 100 метров каждый. А они, в свою очередь есть представление бинарных файлов, каждый из которых необходмо «забить» в секцию, потому они и объявлены с соответствующим атрибутом «section».

Из-за всяких рахзных нолей, запятых и прочее подключаемые файлы раз в 5 больше оригинальных файлов, каждый из них 20 метров. Но всё равно немало, конечно

САм же код. Хм. Непонятна, откуда уверенность в необходимост его оптимизации. Ну, вот эта херь не компилится., к примеру:

Добавлено через 1 минуту

Кашу маслом не испортишь. Точки с запятой абсолютно ни при чём, учитывая содержание подключаемых файлов. В конце каждого массива должна быть точка с запятой (смотрим приведённый код), ну а я сюда вынес.

(Блин, никогда не думал что доживу до подобных замечаний.)

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

Стоп. Дпавайте разберёмся. Я компилю и компилю неудачно. При компиляции, как я понимаю, создаются секции (неудачно же) с названиями, которые я им определил.

В стек же ничего не пихается при компиляции. Это при исполнении- да.

(Хотя что из себя представляет компиляция, мне трудно сказать. Возможно что и там для gcc создаётся стек, в который всё это дело пихается, не знаю. А тогда: не всё ли равно, как назвать секцию? Имеется ввиду именно для этапа компиляции, а не для этапа исполнения. Понятно что при исполнении разные секции есть разные секции с разными атрибутами прочее)

Добавлено через 4 минуты

Ещё раз: всё это дело нельзя выносить в отельный файл.
Только в строку, которая объявлена в экзешнике, а затем транспонировать вместе с экзешником. Только так а не иначе.
Ну, вот щас это дело скомпилилось:

Файлы по метру.
Потом буду увеличивать виртуальную память ещё.

Добавлено через 54 секунды

Добавлено через 1 минуту
..ИМеется ввиду файлы-бинарники по метру, а *cpp метров по 5 каждый

Добавлено через 5 минут
Ну я понял, что ВЫ имели ввиду, предлагая использовать указатель. Нет, так тоже нельзя. Дело в том, что да, я эту прогу без труда перенесу на другую машину и запущу там и даже предположим, что ось выделит место нужного размера. Но тогда в это место мне придётся пихать. пихать файл *dat, то еесть это файл транспонировать вместе с экзешником. Нет, так не пойдёт.

Добавлено через 13 часов 31 минуту
Короче, щас компилится с тремя подключаемыми файлами *сpp размером соответственно: 0,5 метров. 9 метров и 12 метров. Достиг за счёт увеличения виртуальной памяти до 20 гигов.
В процессе компиляции смотрю на занимаемую утилитами (gcc и иже с ней виртуальную память) в проге Марка Руссиновича «Process Exlorer» (очень рекомендую, кстати), она переваливает временами за 1 гиг

. Если учесть, что на компе одновременно много процессов работает, тогда понятно почему вируальной памяти, установленнной по умолчанию+ оперативной (2 гига), не хватает.

Unable to allocate memory | After Effects

某些 Creative Cloud 应用程序、服务和功能在中国不可用。

Issue

When you run After Effects, you could receive messages like, «Unable to allocate 0.000 MB of memory» or, «Unable to allocate 0.002 MB of memory.»

It can be a project-specific issue or a system configuration issue.

Workaround

You could try to use the steps listed below to resolve the issue.

Try to reduce the amount of memory allocated to other applications:

Purge Memory and Disk Cache:

Another way to clean Media and Disk cache is:

If Mercury Transmit is enabled, disable it in Preferences > Video Preview.

Switch Ray Tracing to CPU:

Remove any third-party plugins.

MacOS location

Windows location

C:Program FilesAdobeAdobe Media Encoder CC 2017Support Files (for external plugins)

Reset preferences for After Effects. Make sure that After Effects are closed in your machine (while following the steps).

MacOS

Windows

Check the composition creating issue:

Ensure that the Illustrator files are offline or try to convert the Illustrator files to Shape layers.

If you have used multiple display cards, disable one of them.

If you have applied any expressions, convert them to keyframes.

Try to open the project in After Effects CC 2015.

Источник

Здравия ДТФ, произошла проблема при которой вылетают игры Borderlands 3 и PUBG с ошибками run out of memory, компьютер Ryzen 7 1700 GTX 660 2gb 16gb ddr4 2400, с недавних пор эта проблема проявляется в этих играх (в других не проверял) буквально через 1.5 часа что крайне раздражает и не позволяет нормально играть, файл подкачки до этого убавлял до 2 гигов ибо изначально автоматом ставило почти 30ГБ файла. После изменения файла игралось все стабильно и по гиганстким сессиям.
В чем проблема и как решить?
p.s в стресс тестах стабильности системы аида 80 минут беспрерывно с включенным браузером все было ок, загрузки проверял больше 70% озу не ест

Learn how to get your Edge browser working properly again

by Loredana Harsana

Loredana is a passionate writer with a keen interest in PC software and technology. She started off writing about mobile phones back when Samsung Galaxy S II was… read more


Updated on December 21, 2022

Reviewed by
Vlad Turiceanu

Vlad Turiceanu

Passionate about technology, Windows, and everything that has a power button, he spent most of his time developing new skills and learning more about the tech world. Coming… read more

  • The Out of memory error code in Microsoft Edge occurs when your computer no longer has any spare memory to allocate to the browser or other programs. 
  • The leading causes of the error are memory-related and browser settings, and there are several ways of correcting the issue.
  • How to fix Error code: Out of memory? For example, you may reset the browser using one of the methods below.   

Strugling with your current browser? Upgrade to a better one: OperaYou deserve a better browser! 350 million people use Opera daily, a fully-fledged navigation experience that comes with various built-in packages, enhanced resource consumption and great design. Here’s what Opera can do:

  • Easy migration: use the Opera assistant to transfer exiting data, such as bookmarks, passwords, etc.
  • Optimize resource usage: your RAM memory is used more efficiently than in other browsers
  • Enhanced privacy: free and unlimited VPN integrated
  • No ads: built-in Ad Blocker speeds up loading of pages and protects against data-mining
  • Gaming friendly: Opera GX is the first and best browser for gaming
  • Download Opera

Microsoft Edge shares some engines with the Chrome browser, making it use more memory and consume many of the PC resources.

When they open a new web page on the Edge browser, most users get the Out of memory error code. It makes the page not open, inconveniencing the user.

Most of the issues are memory-related and other Chrome settings, and they can go to the extent of slowing the machine due to the processes like network service.

There are several ways to fix this problem, and most methods involve troubleshooting the Edge settings to clear it.

Several issues related to the browser and memory cause this problem. Some of the problems include:

  • Having a lot of Edge extensions and add-ons
  • Opening many tabs in one window
  • Lack of insufficient memory on your PC
  • Using an outdated version of Edge
  • Interference from the browser’s cookie and cache

What does Error code: Out of memory mean?

This error implies that the resources or memory available in the Edge browser are insufficient to obtain and open the requested web page. In other words, we can say you are out of memory, or there is a Microsoft Edge memory leak.

Because both RAM and hard drive space are casually referred to as memory, some users believe the error message refers to the memory in the hard drive.

Following that, some will begin to delete files from the computer to free up memory. While this will thin the hard drive, it will not resolve your browser’s Out of memory error code.

Moreover, here are some error variations that you may encounter, but nonetheless, fix with the solutions below:

  • Error code out of memory Jupyter Notebook, PC, Windows 11, Windows 10
  • Browser error code out of memory – Error code out of memory Edge, Chrome, Brave
  • Error code out of memory Facebook, YouTube, Canvas, Cypress
  • Error code out of memory chrome StackOverflow, PHP

Luckily, there are different ways to fix the issue and enjoy browsing seamlessly.

How do I fix error Out of memory?

In this article

  • What does Error code: Out of memory mean?
  • How do I fix error Out of memory?
  • 1. Try an alternative browser
  • 2. Clear cache and cookies on Microsoft Edge
  • 3. Remove any extensions and add-ons
  • 4. Reduce memory usage of the browser
  • 5. Repair Microsoft Edge
  • 6. Reset the Microsoft Edge browser
  • 6.1. Use the edge://settings/reset command
  • 6.2. Use the Settings option
  • 7. Change the page filing

1. Try an alternative browser

Edge is a good and dependable browser, but if you continue to receive error messages, try a browser that focuses on performance.

With built-in CPU and RAM limiting features, Opera GX is one of the best alternatives. Moreover, you can enable it by opening the sidebar panel in just a few clicks.

Built to handle in-browser gaming and streaming without interruption, Opera GX also integrates standard browsing features.

You can bookmark your favorite pages, customize your experience with dedicated extensions, and use the instant messaging sidebar to communicate with your peers quickly.

The browser is also very much focused on privacy, with a built-in anti-tracking feature and a free VPN with unlimited bandwidth. The VPN will hide your IP and also help you bypass geo-blocks.

Opera GX

Browse error-free with this performance-oriented with dedicated CPU and RAM controls and industry-leading privacy features.

2. Clear cache and cookies on Microsoft Edge

1. Open the Edge browser on your PC.

2. Click on the Settings option.

microsoft edge error code 1 settings

3. Click on the Privacy, search, and services tab to provide more options.

Edge error code settings

4. Select the Balanced option from the three to improve your privacy.

Edge error code balanced settings

5. Go to the Clear browsing data tab and click the Choose what to clear button.

Edge error code choose what to clear

6. A pop-up will display where you have to choose the Time range, check the Cookies and other site data and Cached images and files options.

error code out of memory

7. After you made your selection, click the Clear now button.

Using a browser such as Microsoft Edge saves information from websites you visit in its cache and cookies. Clearing these can help with a website’s formatting and loading issues and make your browsing more secure.

Clearing cache removes all the Edge errors. So restart the browser and try to re-access the web pages to see if it’s solved.

We recommend CCleaner, a professional tool that automatically cleans your browser’s cookies, trackers, internet history, download history, and cache. Plus, this software can even delete individual session activity.

3. Remove any extensions and add-ons

  1. Open the Edge browser and click on the three-dotted lines.
  2. Choose the Extensions option.
  3. Look for the list of the Installed extensions.
  4. Click on the extensions button to turn it off, and you may also click the Remove button to uninstall them.

Most users use add-ons and extensions to improve their experience on the web and automate some processes with the help of the add-ons. But too many of them can affect the browser’s performance by using more memory allocated.

4. Reduce memory usage of the browser

  1. Launch your Microsoft Edge browser.Edge error code
  2. Press Shift + Esc on the keyboard to open the Browser Task Manager.
  3. Locate the browser tab that uses a lot of memory, click on it, and click the End process button.

Some things that affect memory usage include ads, screen resolution, the tab’s content, windows size, number of browser tabs open, e.t.c.

5. Repair Microsoft Edge

  1. Press Windows key + I to open the Settings app.
  2. Click on the Apps tab.
  3. Click on the Apps and features tab.
  4. Select the Edge browser.
  5. Click on the three-dotted lines and select Modify.
  6. Click on the Repair button when you receive a pop-up.
Read more about this topic

  • Edge Shortcut Keeps Appearing on Desktop: 5 Easy Fixes
  • How To Stop Microsoft Edge From Running in Background
  • Fix: Microsoft Edge Keeps Freezing, Hangs or It’s Not Responding

6. Reset the Microsoft Edge browser

6.1. Use the edge://settings/reset command

  1. Open the Edge browser.
  2. Type the following command in the address brand and hit Enter.
    edge://settings/reset
  3. Depending on your browser’s data, it will take a few minutes to pop up. Next, choose the Restore settings to their default values option.
  4. You will get a notification alerting you of the reset. Click on the Reset button.

Resetting the Edge browser brings all the settings to default. It will clear all the tabs and delete all the cookies and cache, maintaining the history and the saved passwords.

Note that you may also have the error code out of memory Edge error on platforms like Xbox.

6.2. Use the Settings option

  1. Launch your browser and click on the Settings option.
  2. Click on the Reset settings option.
  3. Click the Restore settings to their default values.
  4. A reset pop-up will emerge. Click on the Reset button.

Once done, double-check to see if the error code out of memory error in Edge is fixed; if not, proceed to a different solution.

7. Change the page filing

  1. Go to the Search button, search for Advanced System Settings, and hit Enter.
  2. Click on the Advanced tab.
  3. Select the Settings button in the Performance section.
  4. Click on the Advanced tab.
  5. Hit the Change button.
  6. Untick the Automatically manage page file size for all drives option.
  7. Select the Custom size button and in the Initial size, enter the Recommended size. Then, on the Maximum size box, enter Currently allocated values.
  8. Click on the Set button, then OK to apply the changes.

Fixing the issue takes a few minutes when you do the right thing. However, it requires fewer skills, and anyone can fix it. The code comes in some variants; sometimes, you may have an error code that says this page is having a problem.

Users need to know that some errors occur when they browse, there is no need to panic but carry out the different troubleshooting methods.

However, it is good to reduce the resources, especially the hardware resources that also affect memory.

Before applying those fixes, when you encounter the problem, perform the basic troubleshooting first, like restarting the PC and browser.

Most browsers also have this issue, and you can use the same steps stated above to correct it. For example, you can check out how to solve the Server execution failed error on Chrome.

Which method helped you fix the error? Do not hesitate to let us know in the comments section below.

newsletter icon

Newsletter

Learn how to get your Edge browser working properly again

by Loredana Harsana

Loredana is a passionate writer with a keen interest in PC software and technology. She started off writing about mobile phones back when Samsung Galaxy S II was… read more


Updated on December 21, 2022

Reviewed by
Vlad Turiceanu

Vlad Turiceanu

Passionate about technology, Windows, and everything that has a power button, he spent most of his time developing new skills and learning more about the tech world. Coming… read more

  • The Out of memory error code in Microsoft Edge occurs when your computer no longer has any spare memory to allocate to the browser or other programs. 
  • The leading causes of the error are memory-related and browser settings, and there are several ways of correcting the issue.
  • How to fix Error code: Out of memory? For example, you may reset the browser using one of the methods below.   

Strugling with your current browser? Upgrade to a better one: OperaYou deserve a better browser! 350 million people use Opera daily, a fully-fledged navigation experience that comes with various built-in packages, enhanced resource consumption and great design. Here’s what Opera can do:

  • Easy migration: use the Opera assistant to transfer exiting data, such as bookmarks, passwords, etc.
  • Optimize resource usage: your RAM memory is used more efficiently than in other browsers
  • Enhanced privacy: free and unlimited VPN integrated
  • No ads: built-in Ad Blocker speeds up loading of pages and protects against data-mining
  • Gaming friendly: Opera GX is the first and best browser for gaming
  • Download Opera

Microsoft Edge shares some engines with the Chrome browser, making it use more memory and consume many of the PC resources.

When they open a new web page on the Edge browser, most users get the Out of memory error code. It makes the page not open, inconveniencing the user.

Most of the issues are memory-related and other Chrome settings, and they can go to the extent of slowing the machine due to the processes like network service.

There are several ways to fix this problem, and most methods involve troubleshooting the Edge settings to clear it.

Several issues related to the browser and memory cause this problem. Some of the problems include:

  • Having a lot of Edge extensions and add-ons
  • Opening many tabs in one window
  • Lack of insufficient memory on your PC
  • Using an outdated version of Edge
  • Interference from the browser’s cookie and cache

What does Error code: Out of memory mean?

This error implies that the resources or memory available in the Edge browser are insufficient to obtain and open the requested web page. In other words, we can say you are out of memory, or there is a Microsoft Edge memory leak.

Because both RAM and hard drive space are casually referred to as memory, some users believe the error message refers to the memory in the hard drive.

Following that, some will begin to delete files from the computer to free up memory. While this will thin the hard drive, it will not resolve your browser’s Out of memory error code.

Moreover, here are some error variations that you may encounter, but nonetheless, fix with the solutions below:

  • Error code out of memory Jupyter Notebook, PC, Windows 11, Windows 10
  • Browser error code out of memory – Error code out of memory Edge, Chrome, Brave
  • Error code out of memory Facebook, YouTube, Canvas, Cypress
  • Error code out of memory chrome StackOverflow, PHP

Luckily, there are different ways to fix the issue and enjoy browsing seamlessly.

How do I fix error Out of memory?

In this article

  • What does Error code: Out of memory mean?
  • How do I fix error Out of memory?
  • 1. Try an alternative browser
  • 2. Clear cache and cookies on Microsoft Edge
  • 3. Remove any extensions and add-ons
  • 4. Reduce memory usage of the browser
  • 5. Repair Microsoft Edge
  • 6. Reset the Microsoft Edge browser
  • 6.1. Use the edge://settings/reset command
  • 6.2. Use the Settings option
  • 7. Change the page filing

1. Try an alternative browser

Edge is a good and dependable browser, but if you continue to receive error messages, try a browser that focuses on performance.

With built-in CPU and RAM limiting features, Opera GX is one of the best alternatives. Moreover, you can enable it by opening the sidebar panel in just a few clicks.

Built to handle in-browser gaming and streaming without interruption, Opera GX also integrates standard browsing features.

You can bookmark your favorite pages, customize your experience with dedicated extensions, and use the instant messaging sidebar to communicate with your peers quickly.

The browser is also very much focused on privacy, with a built-in anti-tracking feature and a free VPN with unlimited bandwidth. The VPN will hide your IP and also help you bypass geo-blocks.

Opera GX

Browse error-free with this performance-oriented with dedicated CPU and RAM controls and industry-leading privacy features.

2. Clear cache and cookies on Microsoft Edge

1. Open the Edge browser on your PC.

2. Click on the Settings option.

microsoft edge error code 1 settings

3. Click on the Privacy, search, and services tab to provide more options.

Edge error code settings

4. Select the Balanced option from the three to improve your privacy.

Edge error code balanced settings

5. Go to the Clear browsing data tab and click the Choose what to clear button.

Edge error code choose what to clear

6. A pop-up will display where you have to choose the Time range, check the Cookies and other site data and Cached images and files options.

error code out of memory

7. After you made your selection, click the Clear now button.

Using a browser such as Microsoft Edge saves information from websites you visit in its cache and cookies. Clearing these can help with a website’s formatting and loading issues and make your browsing more secure.

Clearing cache removes all the Edge errors. So restart the browser and try to re-access the web pages to see if it’s solved.

We recommend CCleaner, a professional tool that automatically cleans your browser’s cookies, trackers, internet history, download history, and cache. Plus, this software can even delete individual session activity.

3. Remove any extensions and add-ons

  1. Open the Edge browser and click on the three-dotted lines.
  2. Choose the Extensions option.
  3. Look for the list of the Installed extensions.
  4. Click on the extensions button to turn it off, and you may also click the Remove button to uninstall them.

Most users use add-ons and extensions to improve their experience on the web and automate some processes with the help of the add-ons. But too many of them can affect the browser’s performance by using more memory allocated.

4. Reduce memory usage of the browser

  1. Launch your Microsoft Edge browser.Edge error code
  2. Press Shift + Esc on the keyboard to open the Browser Task Manager.
  3. Locate the browser tab that uses a lot of memory, click on it, and click the End process button.

Some things that affect memory usage include ads, screen resolution, the tab’s content, windows size, number of browser tabs open, e.t.c.

5. Repair Microsoft Edge

  1. Press Windows key + I to open the Settings app.
  2. Click on the Apps tab.
  3. Click on the Apps and features tab.
  4. Select the Edge browser.
  5. Click on the three-dotted lines and select Modify.
  6. Click on the Repair button when you receive a pop-up.
Read more about this topic

  • Edge Shortcut Keeps Appearing on Desktop: 5 Easy Fixes
  • How To Stop Microsoft Edge From Running in Background
  • Fix: Microsoft Edge Keeps Freezing, Hangs or It’s Not Responding

6. Reset the Microsoft Edge browser

6.1. Use the edge://settings/reset command

  1. Open the Edge browser.
  2. Type the following command in the address brand and hit Enter.
    edge://settings/reset
  3. Depending on your browser’s data, it will take a few minutes to pop up. Next, choose the Restore settings to their default values option.
  4. You will get a notification alerting you of the reset. Click on the Reset button.

Resetting the Edge browser brings all the settings to default. It will clear all the tabs and delete all the cookies and cache, maintaining the history and the saved passwords.

Note that you may also have the error code out of memory Edge error on platforms like Xbox.

6.2. Use the Settings option

  1. Launch your browser and click on the Settings option.
  2. Click on the Reset settings option.
  3. Click the Restore settings to their default values.
  4. A reset pop-up will emerge. Click on the Reset button.

Once done, double-check to see if the error code out of memory error in Edge is fixed; if not, proceed to a different solution.

7. Change the page filing

  1. Go to the Search button, search for Advanced System Settings, and hit Enter.
  2. Click on the Advanced tab.
  3. Select the Settings button in the Performance section.
  4. Click on the Advanced tab.
  5. Hit the Change button.
  6. Untick the Automatically manage page file size for all drives option.
  7. Select the Custom size button and in the Initial size, enter the Recommended size. Then, on the Maximum size box, enter Currently allocated values.
  8. Click on the Set button, then OK to apply the changes.

Fixing the issue takes a few minutes when you do the right thing. However, it requires fewer skills, and anyone can fix it. The code comes in some variants; sometimes, you may have an error code that says this page is having a problem.

Users need to know that some errors occur when they browse, there is no need to panic but carry out the different troubleshooting methods.

However, it is good to reduce the resources, especially the hardware resources that also affect memory.

Before applying those fixes, when you encounter the problem, perform the basic troubleshooting first, like restarting the PC and browser.

Most browsers also have this issue, and you can use the same steps stated above to correct it. For example, you can check out how to solve the Server execution failed error on Chrome.

Which method helped you fix the error? Do not hesitate to let us know in the comments section below.

newsletter icon

Newsletter

Windows 7 Professional Windows 7 Enterprise Windows 7 Ultimate Windows Server 2008 R2 Standard Windows Server 2008 R2 Enterprise Windows Server 2008 R2 Datacenter Windows Server 2008 R2 Foundation Windows Server 2008 R2 for Itanium-Based Systems More…Less

Symptoms

Consider the following scenario:

  • You have a computer that is running Windows 7 or Windows Server 2008 R2.

  • You try to export to some circular files that are used by the Event Tracing for Windows (ETW) feature.

In this scenario, you cannot export to these files, and you receive the following error message:

out of memory

For example, consider the following scenario:

  • You run the following command to set the cluster log size to 512 megabytes (MB):

    cluster log /size:512

  • You run the following command to export the trace to a text file:

    cluster log /g

In this scenario, you receive the error message. Because of this issue, the memory usage of the Cprepsrv.exe process is high. Additionally, the computer stops responding because memory is insufficient.

Cause

This issue occurs because the ETW engine handles finalized files incorrectly.

When the ETW engine handles some circular files that have finalized and non-finalized files, the buffer count value becomes very large. However, this incorrect buffer count value is used to allocate memory. Therefore, you receive the error message that is mentioned in the «Symptoms» section.

Resolution

Hotfix information

A supported hotfix is available from Microsoft. However, this hotfix is intended to correct only the problem that is described in this article. Apply this hotfix only to systems that are experiencing this specific problem.

If the hotfix is available for download, there is a «Hotfix download available» section at the top of this Knowledge Base article. If this section does not appear, submit a request to Microsoft Customer Service and Support to obtain the hotfix.

Note If additional issues occur or if any troubleshooting is required, you might have to create a separate service request. The usual support costs will apply to additional support questions and issues that do not qualify for this specific hotfix. For a complete list of Microsoft Customer Service and Support telephone numbers or to create a separate service request, visit the following Microsoft Web site:

http://support.microsoft.com/contactus/?ws=supportNote The «Hotfix download available» form displays the languages for which the hotfix is available. If you do not see your language, it is because a hotfix is not available for that language.

Prerequisites

To apply this hotfix, you must be running one of the following operating systems:

  • Windows 7

  • Windows 7 Service Pack 1 (SP1)

  • Windows Server 2008 R2

  • Windows Server 2008 R2 Service Pack 1 (SP1)

For more information about how to obtain a Windows 7 or a Windows Server 2008 R2 service pack, click the following article number to view the article in the Microsoft Knowledge Base:

976932 Information about Service Pack 1 for Windows 7 and for Windows Server 2008 R2

Registry information

To use the hotfix in this package, you do not have to make any changes to the registry.

Restart requirement

You must restart the computer after you apply this hotfix.

Hotfix replacement information

This hotfix does not replace a previously released hotfix.

File information

The global version of this hotfix installs files that have the attributes that are listed in the following tables. The dates and the times for these files are listed in Coordinated Universal Time (UTC). The dates and the times for these files on your local computer are displayed in your local time together with your current daylight saving time (DST) bias. Additionally, the dates and the times may change when you perform certain operations on the files.

Windows 7 and Windows Server 2008 R2 file information notes


Important Windows 7 hotfixes and Windows Server 2008 R2 hotfixes are included in the same packages. However, hotfixes on the Hotfix Request page are listed under both operating systems. To request the hotfix package that applies to one or both operating systems, select the hotfix that is listed under «Windows 7/Windows Server 2008 R2» on the page. Always refer to the «Applies To» section in articles to determine the actual operating system that each hotfix applies to.

  • The files that apply to a specific product, SR_Level (RTM, SPn), and service branch (LDR, GDR) can be identified by examining the file version numbers as shown in the following table.

    Version

    Product

    SR_Level

    Service branch

    6.1.760
    0.
    20xxx

    Windows 7 and Windows Server 2008 R2

    RTM

    LDR

    6.1.760
    1.
    21xxx

    Windows 7 and Windows Server 2008 R2

    SP1

    LDR

  • The MANIFEST files (.manifest) and the MUM files (.mum) that are installed for each environment are listed separately in the «Additional file information for Windows Server 2008 R2 and for Windows 7» section. MUM and MANIFEST files, and the associated security catalog (.cat) files, are extremely important to maintain the state of the updated components. The security catalog files, for which the attributes are not listed, are signed with a Microsoft digital signature.

For all supported x86-based versions of Windows 7

File name

File version

File size

Date

Time

Platform

Advapi32.dll

6.1.7600.20928

640,000

19-Mar-2011

06:52

x86

Advapi32.dll

6.1.7601.21687

640,512

19-Mar-2011

06:53

x86

For all supported x64-based versions of Windows 7 and of Windows Server 2008 R2

File name

File version

File size

Date

Time

Platform

Advapi32.dll

6.1.7600.20928

877,568

19-Mar-2011

07:32

x64

Advapi32.dll

6.1.7601.21687

878,080

19-Mar-2011

07:38

x64

Advapi32.dll

6.1.7600.20928

640,000

19-Mar-2011

06:52

x86

Advapi32.dll

6.1.7601.21687

640,512

19-Mar-2011

06:53

x86

For all supported IA-64-based versions of Windows Server 2008 R2

File name

File version

File size

Date

Time

Platform

Advapi32.dll

6.1.7600.20928

1,564,160

19-Mar-2011

06:43

IA-64

Advapi32.dll

6.1.7601.21687

1,564,160

19-Mar-2011

06:48

IA-64

Advapi32.dll

6.1.7600.20928

640,000

19-Mar-2011

06:52

x86

Advapi32.dll

6.1.7601.21687

640,512

19-Mar-2011

06:53

x86

Status

Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the «Applies to» section.

More Information

For more information about software update terminology, click the following article number to view the article in the Microsoft Knowledge Base:

824684 Description of the standard terminology that is used to describe Microsoft software updates

For more information about a similar issue in Windows Server 2008 or in Windows Vista, click the following article number to view the article in the Microsoft Knowledge Base:

2257986 You receive the «out of memory» error message when you try to export to circular files in Windows Server 2008 or in Windows Vista

Additional file information

Additional file information for Windows 7 and for Windows Server 2008 R2

Additional files for all supported x86-based versions of Windows 7

File name

Update.mum

File version

Not applicable

File size

2,773

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

X86_56f2164f922b2f8537785abcba4fac65_31bf3856ad364e35_6.1.7601.21687_none_ee94589842885ebe.manifest

File version

Not applicable

File size

696

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

X86_f75d57ff99dca7655288df83c5252bb6_31bf3856ad364e35_6.1.7600.20928_none_485b6566fa29ab9f.manifest

File version

Not applicable

File size

696

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

X86_microsoft-windows-advapi32_31bf3856ad364e35_6.1.7600.20928_none_e3ec2e7d00bf840d.manifest

File version

Not applicable

File size

2,719

Date (UTC)

19-Mar-2011

Time (UTC)

07:22

Platform

Not applicable

File name

X86_microsoft-windows-advapi32_31bf3856ad364e35_6.1.7601.21687_none_e590a9cafe178121.manifest

File version

Not applicable

File size

2,719

Date (UTC)

19-Mar-2011

Time (UTC)

07:20

Platform

Not applicable

Additional files for all supported x64-based versions of Windows 7 and of Windows Server 2008 R2

File name

Amd64_3144ba4d9040a7e1feab72a1e3b0ebc4_31bf3856ad364e35_6.1.7600.20928_none_8350571323769fab.manifest

File version

Not applicable

File size

1,040

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

Amd64_56f2164f922b2f8537785abcba4fac65_31bf3856ad364e35_6.1.7601.21687_none_4ab2f41bfae5cff4.manifest

File version

Not applicable

File size

698

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

Amd64_8014512d693bc0ef97c6e78d60ef6e04_31bf3856ad364e35_6.1.7600.20928_none_4cc5c8743cf574aa.manifest

File version

Not applicable

File size

700

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

Amd64_84924b498e7ec05493e1d22793b6dd48_31bf3856ad364e35_6.1.7601.21687_none_204a572a8aa3532c.manifest

File version

Not applicable

File size

1,040

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

Amd64_c7bacbeccb6d5e63576fd2c03142b861_31bf3856ad364e35_6.1.7601.21687_none_e1118973af1d173a.manifest

File version

Not applicable

File size

700

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

Amd64_f75d57ff99dca7655288df83c5252bb6_31bf3856ad364e35_6.1.7600.20928_none_a47a00eab2871cd5.manifest

File version

Not applicable

File size

698

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

Amd64_microsoft-windows-advapi32_31bf3856ad364e35_6.1.7600.20928_none_400aca00b91cf543.manifest

File version

Not applicable

File size

2,723

Date (UTC)

19-Mar-2011

Time (UTC)

08:18

Platform

Not applicable

File name

Amd64_microsoft-windows-advapi32_31bf3856ad364e35_6.1.7601.21687_none_41af454eb674f257.manifest

File version

Not applicable

File size

2,723

Date (UTC)

19-Mar-2011

Time (UTC)

08:13

Platform

Not applicable

File name

Update.mum

File version

Not applicable

File size

4,059

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

X86_microsoft-windows-advapi32_31bf3856ad364e35_6.1.7600.20928_none_e3ec2e7d00bf840d.manifest

File version

Not applicable

File size

2,719

Date (UTC)

19-Mar-2011

Time (UTC)

07:22

Platform

Not applicable

File name

X86_microsoft-windows-advapi32_31bf3856ad364e35_6.1.7601.21687_none_e590a9cafe178121.manifest

File version

Not applicable

File size

2,719

Date (UTC)

19-Mar-2011

Time (UTC)

07:20

Platform

Not applicable

Additional files for all supported IA-64-based versions of Windows Server 2008 R2

File name

Ia64_2f59fc48dd07386c526633d65501fb87_31bf3856ad364e35_6.1.7600.20928_none_65e5f6455878c21f.manifest

File version

Not applicable

File size

698

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

Ia64_56f2164f922b2f8537785abcba4fac65_31bf3856ad364e35_6.1.7601.21687_none_ee95fc8e428667ba.manifest

File version

Not applicable

File size

697

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

Ia64_c79b6fad3ef91b5958151a25bde7f91e_31bf3856ad364e35_6.1.7601.21687_none_2c4d549af0405275.manifest

File version

Not applicable

File size

698

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

Ia64_f75d57ff99dca7655288df83c5252bb6_31bf3856ad364e35_6.1.7600.20928_none_485d095cfa27b49b.manifest

File version

Not applicable

File size

697

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

Ia64_microsoft-windows-advapi32_31bf3856ad364e35_6.1.7600.20928_none_e3edd27300bd8d09.manifest

File version

Not applicable

File size

2,721

Date (UTC)

19-Mar-2011

Time (UTC)

08:20

Platform

Not applicable

File name

Ia64_microsoft-windows-advapi32_31bf3856ad364e35_6.1.7601.21687_none_e5924dc0fe158a1d.manifest

File version

Not applicable

File size

2,721

Date (UTC)

19-Mar-2011

Time (UTC)

08:15

Platform

Not applicable

File name

Update.mum

File version

Not applicable

File size

2,169

Date (UTC)

21-Mar-2011

Time (UTC)

21:49

Platform

Not applicable

File name

X86_microsoft-windows-advapi32_31bf3856ad364e35_6.1.7600.20928_none_e3ec2e7d00bf840d.manifest

File version

Not applicable

File size

2,719

Date (UTC)

19-Mar-2011

Time (UTC)

07:22

Platform

Not applicable

File name

X86_microsoft-windows-advapi32_31bf3856ad364e35_6.1.7601.21687_none_e590a9cafe178121.manifest

File version

Not applicable

File size

2,719

Date (UTC)

19-Mar-2011

Time (UTC)

07:20

Platform

Not applicable

Need more help?

Приветствую, Хабр!

Немного лирики

Сегодня, 2015-03-21, я решил сделать пол-дела, и всё-таки начать писать статью о том, как же всё-таки начать понимать, что же делать с OOM, да и вообще научиться ковырять heap-dump’ы (буду называть их просто дампами, для простоты речи. Также я постараюсь избегать англицизмов, где это возможно).
Задуманный мной объём «работ» по написанию этой статьи кажется мне не однодневным, а посему статья должна появиться лишь

через пару недель

спустя день.

В этой статье я постараюсь разжевать, что делать с дампами в Java, как понять причину или приблизиться к причине возникновения OOM, посмотреть на инструменты для анализа дампов, инструмент (один, да) для мониторинга хипа, и вообще вникнуть в это дело для общего развития. Исследуются такие инструменты, как JVisualVM (рассмотрю некоторые плагины к нему и OQL Console), Eclipse Memory Analyzing Tool.
Очень много понаписал, но надеюсь, что всё только по делу :)

Предыстория

Для начала нужно понять, как возникает OOM. Кому-то это может быть ещё неизвестно.
Представьте себе, что есть какой-то верхний предел занимаемой оперативки для приложения. Пусть это будет гигабайт ОЗУ.
Само по себе возникновение OOM в каком-то из потоков ещё не означает, что именно этот поток «выжрал» всю свободную память, да и вообще не означает, что именно тот кусок кода, который привёл к OOM, виноват в этом.
Вполне нормальна ситуация, когда какой-то поток чем-то занимался, поедая память, «дозанимался» этим до состояния «ещё немного, и я лопну», и завершил выполнение, приостановившись. А в это время какой-то другой поток решил запросить для своей маленькой работы ещё немного памяти, сборщик мусора попыжылся, конечно, но мусора уже в памяти не нашёл. В этом случае как раз и возникает OOM, не связанный с источником проблемы, когда стектрейс покажет совсем не того виновника падения приложения.

Есть и другой вариант. Около недели я исследовал, как улучшить жизнь парочки наших приложений, чтобы они перестали себя нестабильно вести. И ещё недельку-две потратил на то, чтобы привести их в порядок. В общей сложности пара недель времени, которые растянулись на полтора месяца, ведь занимался я не только этими проблемами.
Из найденного: сторонняя библиотека, и, конечно же, некоторые неучтённые вещи в вызовах хранимых процедур.
В одном приложении симптомы были следующие: в зависимости от нагрузки на сервис, оно могло упасть через сутки, а могло через двое. Если помониторить состояние памяти, то было видно, что приложение постепенно набирало «размер», и в определённый момент просто ложилось.
С другим приложением несколько интереснее. Оно может вести себя хорошо длительный срок, а могло перестать отвечать минут через 10 после перезагрузки, или вдруг внезапно упасть, сожрав всю свободную память (это я уже сейчас вижу, наблюдая за ним). А после обновления версии, когда была изменена и версия Tomcat с 7й до 8й, и JRE, оно вдруг в одну из пятниц (проработав вменяемо до этого ни много ни мало — 2 недели) начало творить такие вещи, что стыдно признаваться в этом. :)

В обоих историях очень полезны оказались дампы, благодаря им удалось отыскать все причины падений, подружившись с такими инструментами, как JVisualVM (буду называть его JVVM), Eclipse Memory Analyzing Tool (MAT) и языком OQL (может быть я не умею его правильно готовить в MAT, но мне оказалось легче подружиться с реализацией OQL именно в JVVM).
Ещё вам понадобится свободная оперативка для того, чтобы было куда загружать дампы. Её объём должен быть соизмерим с размером открываемого дампа.

Начало

Итак, начну потихоньку раскрывать карты, и начну именно с JVVM.

Этот инструмент в соединении с jstatd и jmx позволяет удалённо наблюдать за жизнью приложения на сервере: Heap, процессор, PermGen, количество потоков и классов, активность потоков, позволяет проводить профилирование.
Также JVVM расширяем, и я не преминул воспользоваться этой возможностью, установив некоторые плагины, которые позволили куда больше вещей, например, следить и взаимодействать с MBean’ами, наблюдать за деталями хипа, вести длительное наблюдение за приложением, держа в «голове» куда больший период метрик, чем предоставляемый вкладкой Monitor час.


Вот так выглядит набор установленных плагинов.
Visual GC (VGC) позволяет видеть метрики, связанные с хипом.

Детальнее о том, из чего состоит хип в этой нашей Java



Вот два скриншота вкладки VGC, которые показывают, как ведут себя два разных приложения.
Слева Вы можете увидеть такие разделы хипа, как Perm Gen, Old Gen, Survivor 0, Survivor 1, и Eden Space.
Все эти составляющие — участки в оперативке, в которую и складываются объекты.
PermGen — Permanent Generation — область памяти в JVM, предназначенная для хранения описания классов Java и некоторых дополнительных данных.
Old Gen — это область памяти для достаточно старых объектов, которые пережили несколько перекладываний с места на место в Survivor-областях, и в момент какого-то очередного переливания попадают в область «старых» объектов.
Survivor 0 и 1 — это области, в которые попадают объекты, которые после создания объекта в Eden Space пережили его чистку, то есть не стали мусором на момент, когда Eden Space начал чиститься Garbage Collector’ом (GC). При каждом запуске чистки Eden Space объекты из активного в текущий момент Survivor’а перекладываются в пассивный, плюс добавляются новые, и после этого Survivor’ы меняются статусами, пассивный становится активным, а активный — пассивным.
Eden Space — область памяти, в которой новые объекты порождаются. При нехватке памяти в этой области запускается цикл GC.

Каждая из этих областей может быть отрегулирована по размеру в процессе работы приложения самой виртуальной машиной.
Если вы указываете -Xmx в 2 гигабайта, например, то это не означает, что все 2 гигабайта будут сразу же заняты (если не запускать сразу что-то активно кушающее память, конечно же). Виртуальная машина сначала постарается держать себя «в узде».
На третьем скриншоте видно неактивную стадию приложения, которое не используется на выходных — Eden растёт равномерно, Survivor’ы перекладываются через равные промежутки времени, Old практически не растёт. Приложение проработало больше 90 часов, и в принципе JVM считает, что приложению требуется не так уж и много, около 540 МБ.

Бывают пиковые ситуации, когда виртуальная машина даже выделяет под хип гораздо больше памяти, но я думаю, что это какие-то ещё «неучтёнки», о которых я расскажу детальнее ниже по тексту, а может просто виртуальная машина выделила больше памяти под Eden, например, чтобы объекты в нём успевали стать мусором до следующего цикла очистки.

Участки, которые на следующем скриншоте я обозначил красным — это как раз возрастание Old, когда некоторые объекты не успевают стать мусором, чтобы быть удалёнными из памяти ранее, и всё-таки попадают в Old. Синий участок — исключение. На протяжении красных участков можно видеть гребёнку — это Eden так себя ведёт.

На протяжении синего участка скорее всего виртуальная машина решила, что нужно увеличить размер Eden-области, потому как при увеличении масштаба в Tracer’е видно, что GC перестал «частить» и таких мелких колебаний, как ранее, теперь нет, колебания стали медленными и редкими.

Перейдём ко второму приложению:

В нём Eden напоминает мне какой-то уровень из Mortal Kombat, арену с шипами. Была такая, кажется… А График GC — шипы из NFS Hot Pursuit, вот те вот, плоские ещё.
Числа справа от названий областей указывают:
1) что Eden имеет размер в 50 мегабайт, и то, что нарисовано в конце графика, последнее из значений на текущий момент — занято 25 мегабайт. Всего он может вырости до 546 мегабайт.
2) что Old может вырости до 1,333 гига, сейчас занимает 405 МБ, и забит на 145,5 МБ.
Так же для Survivor-областей и Perm Gen.
Для сравнения — вот Вам Tracer-график за 75 часов работы второго приложения, думаю, кое-какие выводы вы сможете сделать из него. Например, что активная фаза у этого приложения — с 8:30 до 17:30 в рабочие дни, и что даже на выходных оно тоже работает :)

Если вы вдруг увидели в своём приложении, что Old-область заполнена — попробуйте просто подождать, когда она переполнится, скорее всего она заполнена уже мусором.

Мусор — это объекты, на которые нет активных ссылок из других объектов, или целые комплексы таких объектов (например, какое-то «облако» взаимосвязанных оъектов может стать мусором, если набор ссылок указывает только на объекты внутри этого «облака», и ни на один объект в этом «облаке» ничто не ссылается «снаружи»).

Это был краткий пересказ того, что я узнал про структуру хипа за время, пока гуглил.

Предпосылки

Итак, случилось сразу две вещи:
1) после перехода на более новые библиотеки/томкеты/джавы в одну из пятниц приложение, которое я уже долгое время веду, вдруг стало вести себя из рук вон плохо спустя две недели после выставления.
2) мне на рефакторинг отдали проект, который тоже вёл себя до некоторого времени не очень хорошо.

Я уже не помню, в каком точно порядке произошли эти события, но после «чёрной пятницы» я решил наконец-то разобраться с дампами памяти детальнее, чтобы это более не было для меня чёрным ящиком. Предупреждаю, что какие-то детали я мог уже запамятовать.

По первому случаю симптомы были такие: все потоки, отвественные за обработку запросов, выжраны, на базу данных открыто всего 11 соединений, и те не сказать, что используются, база говорила, что они в состоянии recv sleep, то есть ожидают, когда же их начнут использовать.
После перезагрузки приложение оживало, но прожить могло недолго, вечером той же пятницы жило дольше всего, но уже после окончания рабочего дня таки снова свалилось. Картина всегда была одинаковой: 11 соединений к базе, и лишь один, вроде бы, что-то делает.
Память, кстати, была на минимуме. Сказать, что OOM привёл меня к поиску причин, не могу, однако полученные знания при поиске причин позволили начать активную борьбу с OOM.

Когда я открыл дамп в JVVM, из него было сложно что-либо понять.

Подсознание подсказывало, что причина где-то в работе с базой.
Поиск среди классов сказал мне, что в памяти аж 29 DataSource, хотя должно быть всего 7.

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

OQL

Сидеть переклацывать в просмотровщике все эти объекты было некогда, и моё внимание наконец-то привлекла вкладка OQL Console, я подумал, что вот он, момент истины — я или начну использовать её на полную катушку, или так и забью на всё это.

Прежде, чем начать, конечно же был задан вопрос гуглу, и он любезно предоставил шпаргалку (cheat sheet) по использованию OQL в JVVM: http://visualvm.java.net/oqlhelp.html

Сначала обилие сжатой информации привело меня в уныние, но после применения гугл-фу на свет таки появился вот такой OQL-запрос:

select {instance: x, uri: x.url.toString(), connPool: x.connectionPool}
from org.apache.tomcat.dbcp.dbcp2.BasicDataSource x
where x.url != null
&& x.url.toString() == "jdbc:sybase:Tds:айпишник:порт/базаДанных"

Это уже исправленная и дополненная, финальная версия этого запроса :)
Результат можно увидеть на скриншоте:

После нажатия на BasicDataSource#7 мы попадаем на нужный объект во вкладке Instances:

Через некоторое время до меня дошло, что есть одно несхождение с конфигурацией, указанной в теге Resource в томкете, в файле /conf/context.xml. Ведь в дампе параметр maxTotal имеет значение 8, в то время, как мы указывали maxActive равным 20…

Тут-то до меня и начало доходить, что приложение жило с неправильной конфигурацией пула соединений все эти две недели!
Для краткости напишу тут, что в случае, если вы используете Tomcat и в качестве пула соединений — DBCP, то в 7м томкете используется DBCP версии 1.4, а в 8м томкете — уже DBCP 2.0, в котором, как я потом выяснил, решили переименовать некоторые параметры! А про maxTotal вообще на главной странице сайта написано :)
http://commons.apache.org/proper/commons-dbcp/
«Users should also be aware that some configuration options (e.g. maxActive to maxTotal) have been renamed to align them with the new names used by Commons Pool 2.»

Причины

Обозвал их по всякому, успокоился, и решил разобраться.
Как оказалось, класс BasicDataSourceFactory просто напросто получает этот самый Resource, смотрит, есть ли нужные ему параметры, и забирает их в порождаемый объект BasicDataSource, молча игнорируя напрочь всё, что его не интересует.
Так и получилось, что они переименовали самые весёлые параметры, maxActive => maxTotal, maxWait => maxWaitMillis, removeAbandoned => removeAbandonedOnBorrow & removeAbandonedOnMaintenance.
По умолчанию maxTotal, как и ранее, равен 8; removeAbandonedOnBorrow, removeAbandonedOnMaintenance = false, maxWaitMillis устанавливается в значение «ждать вечно».
Получилось, что пул оказался сконфигурирован с минимальным количеством соединений; в случае, если заканчиваются свободные соединения — приложение молча ждёт, когда они освободятся; и добивает всё молчанка в логах по поводу «заброшенных» соединений — то, что могло бы сразу показать, в каком именно месте

программист мудак

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

«Так быть не должно», решил я, и запилил патчик (https://issues.apache.org/jira/browse/DBCP-435, выразился в http://svn.apache.org/viewvc/commons/proper/dbcp/tags/DBCP_2_1/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java?view=markup ), патч был принят и вошёл в версию DBCP 2.1. Когда и если Tomcat 8 обновит версию DBCP до 2.1+, думаю, что админам откроются многие тайны про их конфигурации Resource :)

По поводу этого происшествия мне лишь осталось рассказать ещё одну деталь — какого чёрта в дампе было аж 29 DataSource’ов вместо всего 7 штук. Разгадка кроется в банальной арифметике, 7*4=28 +1=29.

Детальнее о том, почему нельзя закидывать Resource в файл /conf/context.xml томкета

На каждую подпапку внутри папки /webapps поднимается своя копия /conf/context.xml, а значит то количество Resource, которые там есть, следует умножать на количество приложений, чтобы получить общее количество пулов, поднятых в памяти томкета. На вопрос «что в этом случае делать?» ответ будет таким: нужно вынести все объявления Resource из /conf/context.xml в файл /conf/server.xml, внутрь тега GlobalNamingResources. Там Вы можете найти один, имеющийся по умолчанию, Resource name=«UserDatabase», вот под ним и размещайте свои пулы. Далее необходимо воспользоваться тегом ResourceLink, его желательно поместить в приложение, в проекте, внутрь файла /META-INF/context.xml — это так называемый «per-app context», то есть контекст, который содержит объявления компонентов, которые будут доступны только для разворачиваемого приложения. У ResourceLink параметры name и global могут содержать одинаковые значения.
Для примера:

<ResourceLink name="jdbc/MyDB" global="jdbc/MyDB" type="javax.sql.DataSource"/>

Эта ссылка будет выхватывать из глобально объявленных ресурсов DataSource с именем «jdbc/MyDB», и ресурс станет доступен приложению.
ResourceLink можно (но не нужно) разместить и в /conf/context.xml, но в этом случае доступ к ресурсам, объявленным глобально, будет у всех приложений, пусть даже и не будет столько копий DataSource в памяти.
Ознакомиться с деталями можно вот тут: GlobalNamingResources — http://tomcat.apache.org/tomcat-7.0-doc/config/globalresources.html#Environment_Entries, ResourceLink — http://tomcat.apache.org/tomcat-7.0-doc/config/globalresources.html#Resource_Links, также можно просмотреть эту страницу: tomcat.apache.org/tomcat-7.0-doc/config/context.html.
Для TC8 эти же страницы: http://tomcat.apache.org/tomcat-8.0-doc/config/globalresources.html и http://tomcat.apache.org/tomcat-8.0-doc/config/context.html .

После этого всё стало ясно: 11 соединений было потому, что в одном, активном DataSource было съедено 8 соединений (maxTotal = 8), и ещё по minIdle=1 в трёх других неиспользуемых DataSource-копиях.

В ту пятницу мы откатились на Tomcat 7, который лежал рядышком, и ждал, когда от него избавятся, это дало время спокойно во всём разобраться.
Плюс позже, уже на TC7, обнаружилась утечка соединений, всё благодаря removeAbandoned+logAbandoned. DBCP радостно сообщил в логфайл catalina.log о том, что

"org.apache.tomcat.dbcp.dbcp.AbandonedTrace$AbandonedObjectException: DBCP object created 2015-02-10 09:34:20 by the following code was never closed:
	at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.setStackTrace(AbandonedTrace.java:139)
	at org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:81)
	at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
	at наш.пакет.СуперКласс.getConnection(СуперКласс.java:100500)
	at наш.пакет.СуперКласс.плохойПлохойМетод(СуперКласс.java:100800)
	at наш.пакет.СуперКласс.вполнеВменяемыйМетод2(СуперКласс.java:100700)
	at наш.пакет.СуперКласс.вполнеВменяемыйМетод1(СуперКласс.java:100600)
	ещё куча строк..."

Вот этот вот плохойПлохойМетод имеет в сигнатуре Connection con, но внутри была конструкция «con = getConnection();», которая и стала камнем преткновения. СуперКласс вызывается редко, поэтому на него и не обращали внимания так долго. Плюс к этому, вызовы происходили, я так понимаю, не во время рабочего дня, так что даже если что-то и подвисало, то никому уже не было дела до этого. А в ТуСамуюПятницу просто звёзды сошлись, начальнику департамента заказчика понадобилось посмотреть кое-что :)

Приложение №2

Что же касается «события №2» — мне отдали приложение на рефакторинг, и оно на серверах тут же вздумало упасть.
Дампы попали уже ко мне, и я решил попробовать поковырять и их тоже.
Открыл дамп в JVVM, и «чё-то приуныл»:

Что можно понять из Object[], да ещё и в таком количестве?
( Опытный человек, конечно же, увидел уже причину, правда? :) )

Так у меня зародилась мысль «ну неужели никто ранее не занимался этим, ведь наверняка уже есть готовый инструмент!». Так я наткнулся на этот вопрос на StackOverflow: http://stackoverflow.com/questions/2064427/recommendations-for-a-heap-analysis-tool-for-java.
Посмотрев предложенные варианты, я решил остановиться на MAT, надо было попробовать хоть что-то, а это открытый проект, да ещё и с куда бОльшим количеством голосов, чем у остальных пунктов.

Eclipse Memory Analyzing Tool

Итак, MAT.
Рекомендую скачивать последнюю версию Eclipse, и устанавливать MAT туда, потому как самостоятельная версия MAT ведёт себя плохо, там какая-то чертовщина с диалогами, в них не видно содержимого в полях. Быть может кто-то подскажет в комментариях, чего ему не хватает, но я решил проблему, установив MAT в Eclipse.

Открыв дамп в MAT я запросил выполнение Leak Suspects Report.


Удивлению не было предела, честно говоря.

1.2 гига весят соединения в базу.

Каждое соединение весит от 17 до 81 мегабайта.

Ну и ещё «немного» сам пул.
Визуализировать проблему помог отчёт Dominator Tree:

Причиной всех падений оказались километры SQLWarning’ов, база настойчиво пыталась дать понять, что «010SK: Database cannot set connection option SET_READONLY_TRUE.», а пул соединений BoneCP не вычищает SQLWarning’и после освобождения и возврата соединений в пул (может быть это где-то можно сконфигурировать? Подскажите, если кто знает).
Гугл сказал, что такая проблема с Sybase ASE известна ещё с 2004 года: https://forum.hibernate.org/viewtopic.php?f=1&t=932731
Если вкратце, то «Sybase ASE doesn’t require any optimizations, therefore setReadOnly() produces a SQLWarning.», и указанные решения всё ещё работают.
Однако это не совсем решение проблемы, потому как решение проблемы — это когда при возврате соединения в пул все уведомления базы очищаются в силу того, что они уже никогда никому не понадобятся.
И DBCP таки умеет делать это: http://svn.apache.org/viewvc/commons/proper/dbcp/tags/DBCP_1_4/src/java/org/apache/commons/dbcp/PoolableConnectionFactory.java?view=markup, метод passivateObject(Object obj), в строке 687 можно увидеть conn.clearWarnings();, этот вызов и спасает от километров SQLWarning’ов в памяти.
Об этом я узнал из тикета: https://issues.apache.org/jira/browse/DBCP-102
Также мне подсказали про вот такой тикет в багтрекере: https://issues.apache.org/jira/browse/DBCP-234, но он касается уже версии DBCP 2.0.

В итоге я перевёл приложение на DBCP (пусть и версии 1.4). Пусть нагрузка на сервис и немаленькая (от 800 до 2к запросов в минуту), но всё же приложение ведёт себя хорошо, а это главное. И правильно сделал, потому как BoneCP уже пять месяцев не поддерживается, правда, ему на смену пришёл HikariCP. Нужно будет посмотреть, как дела в его исходниках…

Сражаемся с OOM

Впечатлившись тем, как MAT мне всё разложил по полочкам, я решил не забрасывать этот действенный инструмент, и позже он мне пригодился, потому как в первом приложении ещё остались всяческие «неучтёнки» — неучтённые вещи в коде приложения или коде хранимых процедур, которые иногда приводят к тому, что приложение склеивает ласты. Я их отлавливаю до сих пор.

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

И если нажать на надпись See stacktrace, то да, это будет как раз банальный случай, когда какой-то поток вдруг внезапно упал при попытке отмаршалить результат своей работы.

Однако здесь ничто не указывает на причину возникновения OOM, здесь лишь результат. Найти причину мне пока-что, в силу незнания всей магии OQL в MAT, помогает именно JVVM.
Загружаем дамп там, и пытаемся отыскать причину!

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

Два SybCallableStatement, и один SybPreparedStatement.
Думаю, что дело усложнится, если Statement’ов будет куда больше, но немного подрихтовав один из следующих запросов, указав в where нужные условия, думаю, всё у Вас получится. Плюс, конечно же, стоит хорошенько посмотреть в MAT, что за результаты пытается отмаршалить поток, какой объект, и станет понятнее, какой именно из Statement’ов необходимо искать.

select {
    instance: x,
    stmtQuery: x._query.toString(),
    params: map(x._paramMgr._params, function(obj1) {
            if (obj1 != null) {
                if (obj1._parameterAsAString != null) {
                    return '''+obj1._parameterAsAString.toString()+''';
                } else {
                    return "null";
                }
            } else {
                return "null";
            }
        })
    }
from com.sybase.jdbc4.jdbc.SybCallableStatement x
where x._query != null


Не то, это «внутренние» вызовы.

select {
    instance: x,
    stmtQuery: x._query.toString(),
    params: map(x._paramMgr._params, function(obj1) {
            if (obj1 != null) {
                if (obj1._parameterAsAString != null) {
                    return '''+obj1._parameterAsAString.toString()+''';
                } else {
                    return "null";
                }
            } else {
                return "null";
            }
        })
    }
from com.sybase.jdbc4.jdbc.SybPreparedStatement x
where x._query != null


А вот и дичь!
Для чистоты эксперимента можно кинуть такой же запрос в любимой БД-IDE, и он будет очень долго отрабатывать, а если покопаться в недрах хранимки, то будет понятно, что там просто из базы, которая нам не принадлежит, выбирается 2 миллиона строк по такому запросу с такими параметрами. Эти два миллиона даже влазят в память приложения, но вот попытка отмаршалить результат становится фатальной для приложения. Такое себе харакири. :)
При этом GC старательно убирает все улики, но не спасло его это, всё же источник остался в памяти, и он будет наказан.

Почему-то после всего этого рассказа почувствовал себя тем ещё неудачником.

Прощание

Вот и закончилось моё повествование, надеюсь, Вам понравилось :)
Хотел бы выразить благодарность своему начальнику, он дал мне время во всём этом разобраться. Считаю эти новые знания очень полезными.
Спасибо девушкам из Scorini за неизменно вкусный кофе, но они не прочтут этих слов благодарности — я даже сомневаюсь, что они знают о существовании Хабрахабра :)
Хотелось бы увидеть в комментариях ещё больше полезной инфы и дополнений, буду очень благодарен.

Думаю, самое время почитать документацию к MAT…

UPD1: Да, совсем забыл рассказать про такие полезные вещи, как создание дампов памяти.
docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/clopts.html#gbzrr
Опции
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/disk2/dumps
весьма полезны для генерации дампов в момент падения приложения по OutOfMemoryError,
а также существует возможность снять дамп памяти с приложения «наживо», посреди его работы.
Для этого существует утилита jmap.
Пример вызова для винды:
«C:installPSToolsPsExec.exe» -s «C:Program FilesJavajdk1.7.0_55binjmap.exe» -dump:live,format=b,file=C:dump.hprof 3440
последний параметр — это PID java-процесса. Приложение PsExec из набора PSTools позволяет запускать другие приложения с правами системы, для этого служит ключ «-s». Опция live полезна, чтобы перед сохранением дампа вызвать GC, очистив память от мусора. В случае, когда возникает OOM, чистить память незачем, там уже не осталось мусора, так что не ищите, как можно установить опцию live в случае возникновения OOM.

UPD2 (2015-10-28) | Случай номер два три
(Было принято решение дописать это сюда как апдейт, а не пилить новую статью о том же самом):
Ещё один интересный случай, но уже с Оракловой базой.
Один из проектов использует фичу с XML, проводит поиски по содержимому сохранённого XML-документа. В общем, этот проект иногда давал о себе знать тем, что вдруг внезапно один из инстансов переставал подавать признаки жизни.
Почуяв «хороший» случай потренироваться

на кошках

, я решил посмотреть его дампы памяти.

Первое, что я увидел, было «у вас тут много коннектов в памяти осталось». 21к!!! И какой-то интересный oracle.xdb.XMLType тоже давал жару. «Но это же Оракл!», вертелось у меня в голове. Забегая вперёд скажу что таки да, он виноват.

Итак, видим кучу T4CConnection, которые лежат в HashMap$Entry. Обратил внимание сразу, что вроде бы и SoftHashMap, что, вроде как, должно означать, что оно не должно вырастать до таких размеров. Но результат видите и сами — 50-60 килобайт в коннекте, и их реально МНОГО.

Посмотрев, что собой представляют HashMap$Entry — увидел, что примерно картина одинакова, всё связано с SoftHashMap, с Оракловыми коннектами.

Что, собственно, подтверждалось такой картинкой. HashMap$Entry было просто море, и они более-менее сакуммулировались внутри oracle.xdb.SoftHashMap.
В следующем дампе картина была примерно такой же. По Dominator Tree было видно, что внутри каждого Entry находится тяжёлый такой BinXmlProcessorImpl.

-=-=-
Если учесть, что я в тот момент был не силён в том, что такое xdb, и как он связан с XML, то, несколько растерявшись, я решил, что надо бы погуглить, быть может кто-то уже в курсе, что со всем этим нужно делать. И чутьё не обмануло, по запросу «oracle.xdb.SoftHashMap T4CConnection» нашлось
раз piotr.bzdyl.net/2014/07/memory-leak-in-oracle-softhashmap.html
и два leakfromjavaheap.blogspot.com/2014/02/memory-leak-detection-in-real-life.html
Утвердившись, что тут всё-таки косяк у Оракла, дело оставалось за малым.
Попросил администратора БД посмотреть информацию по обнаруженной проблеме:

xxx: Ключевые слова: SoftHashMap XMLType
yyy: Bug 17537657 Memory leak from XDB in oracle.xdb.SoftHashMap
yyy: The fix for 17537657 is first included in
12.2 (Future Release)
12.1.0.2 (Server Patch Set)
12.1.0.1.4 Database Patch Set Update
12.1.0.1 Patch 11 on Windows Platforms
yyy: нда. Описание
Description
When calling either getDocument() using the thin driver, or getBinXMLStream()
using any driver, memory leaks occur in the oracle.xdb.SoftHashMap class.
BinXMLProcessorImpl classes accumulate in this SoftHashMap, but are never
removed.
xxx: Всё так и есть :)

Вот описание фикса: updates.oracle.com/Orion/Services/download?type=readme&aru=18629243 (для доступа требуется учётка в Оракл).
-=-=-
После применения фикса инстансы нашего приложения живут уже месяц, и пока без эксцессов. *постучал по дереву* *поплевал через левое плечо*
Успехов Вам в поисках!

Время на прочтение
17 мин

Количество просмотров 70K

Приветствую, Хабр!

Немного лирики

Сегодня, 2015-03-21, я решил сделать пол-дела, и всё-таки начать писать статью о том, как же всё-таки начать понимать, что же делать с OOM, да и вообще научиться ковырять heap-dump’ы (буду называть их просто дампами, для простоты речи. Также я постараюсь избегать англицизмов, где это возможно).
Задуманный мной объём «работ» по написанию этой статьи кажется мне не однодневным, а посему статья должна появиться лишь

через пару недель

спустя день.

В этой статье я постараюсь разжевать, что делать с дампами в Java, как понять причину или приблизиться к причине возникновения OOM, посмотреть на инструменты для анализа дампов, инструмент (один, да) для мониторинга хипа, и вообще вникнуть в это дело для общего развития. Исследуются такие инструменты, как JVisualVM (рассмотрю некоторые плагины к нему и OQL Console), Eclipse Memory Analyzing Tool.
Очень много понаписал, но надеюсь, что всё только по делу :)

Предыстория

Для начала нужно понять, как возникает OOM. Кому-то это может быть ещё неизвестно.
Представьте себе, что есть какой-то верхний предел занимаемой оперативки для приложения. Пусть это будет гигабайт ОЗУ.
Само по себе возникновение OOM в каком-то из потоков ещё не означает, что именно этот поток «выжрал» всю свободную память, да и вообще не означает, что именно тот кусок кода, который привёл к OOM, виноват в этом.
Вполне нормальна ситуация, когда какой-то поток чем-то занимался, поедая память, «дозанимался» этим до состояния «ещё немного, и я лопну», и завершил выполнение, приостановившись. А в это время какой-то другой поток решил запросить для своей маленькой работы ещё немного памяти, сборщик мусора попыжылся, конечно, но мусора уже в памяти не нашёл. В этом случае как раз и возникает OOM, не связанный с источником проблемы, когда стектрейс покажет совсем не того виновника падения приложения.

Есть и другой вариант. Около недели я исследовал, как улучшить жизнь парочки наших приложений, чтобы они перестали себя нестабильно вести. И ещё недельку-две потратил на то, чтобы привести их в порядок. В общей сложности пара недель времени, которые растянулись на полтора месяца, ведь занимался я не только этими проблемами.
Из найденного: сторонняя библиотека, и, конечно же, некоторые неучтённые вещи в вызовах хранимых процедур.
В одном приложении симптомы были следующие: в зависимости от нагрузки на сервис, оно могло упасть через сутки, а могло через двое. Если помониторить состояние памяти, то было видно, что приложение постепенно набирало «размер», и в определённый момент просто ложилось.
С другим приложением несколько интереснее. Оно может вести себя хорошо длительный срок, а могло перестать отвечать минут через 10 после перезагрузки, или вдруг внезапно упасть, сожрав всю свободную память (это я уже сейчас вижу, наблюдая за ним). А после обновления версии, когда была изменена и версия Tomcat с 7й до 8й, и JRE, оно вдруг в одну из пятниц (проработав вменяемо до этого ни много ни мало — 2 недели) начало творить такие вещи, что стыдно признаваться в этом. :)

В обоих историях очень полезны оказались дампы, благодаря им удалось отыскать все причины падений, подружившись с такими инструментами, как JVisualVM (буду называть его JVVM), Eclipse Memory Analyzing Tool (MAT) и языком OQL (может быть я не умею его правильно готовить в MAT, но мне оказалось легче подружиться с реализацией OQL именно в JVVM).
Ещё вам понадобится свободная оперативка для того, чтобы было куда загружать дампы. Её объём должен быть соизмерим с размером открываемого дампа.

Начало

Итак, начну потихоньку раскрывать карты, и начну именно с JVVM.

Этот инструмент в соединении с jstatd и jmx позволяет удалённо наблюдать за жизнью приложения на сервере: Heap, процессор, PermGen, количество потоков и классов, активность потоков, позволяет проводить профилирование.
Также JVVM расширяем, и я не преминул воспользоваться этой возможностью, установив некоторые плагины, которые позволили куда больше вещей, например, следить и взаимодействать с MBean’ами, наблюдать за деталями хипа, вести длительное наблюдение за приложением, держа в «голове» куда больший период метрик, чем предоставляемый вкладкой Monitor час.


Вот так выглядит набор установленных плагинов.
Visual GC (VGC) позволяет видеть метрики, связанные с хипом.

Детальнее о том, из чего состоит хип в этой нашей Java



Вот два скриншота вкладки VGC, которые показывают, как ведут себя два разных приложения.
Слева Вы можете увидеть такие разделы хипа, как Perm Gen, Old Gen, Survivor 0, Survivor 1, и Eden Space.
Все эти составляющие — участки в оперативке, в которую и складываются объекты.
PermGen — Permanent Generation — область памяти в JVM, предназначенная для хранения описания классов Java и некоторых дополнительных данных.
Old Gen — это область памяти для достаточно старых объектов, которые пережили несколько перекладываний с места на место в Survivor-областях, и в момент какого-то очередного переливания попадают в область «старых» объектов.
Survivor 0 и 1 — это области, в которые попадают объекты, которые после создания объекта в Eden Space пережили его чистку, то есть не стали мусором на момент, когда Eden Space начал чиститься Garbage Collector’ом (GC). При каждом запуске чистки Eden Space объекты из активного в текущий момент Survivor’а перекладываются в пассивный, плюс добавляются новые, и после этого Survivor’ы меняются статусами, пассивный становится активным, а активный — пассивным.
Eden Space — область памяти, в которой новые объекты порождаются. При нехватке памяти в этой области запускается цикл GC.

Каждая из этих областей может быть отрегулирована по размеру в процессе работы приложения самой виртуальной машиной.
Если вы указываете -Xmx в 2 гигабайта, например, то это не означает, что все 2 гигабайта будут сразу же заняты (если не запускать сразу что-то активно кушающее память, конечно же). Виртуальная машина сначала постарается держать себя «в узде».
На третьем скриншоте видно неактивную стадию приложения, которое не используется на выходных — Eden растёт равномерно, Survivor’ы перекладываются через равные промежутки времени, Old практически не растёт. Приложение проработало больше 90 часов, и в принципе JVM считает, что приложению требуется не так уж и много, около 540 МБ.

Бывают пиковые ситуации, когда виртуальная машина даже выделяет под хип гораздо больше памяти, но я думаю, что это какие-то ещё «неучтёнки», о которых я расскажу детальнее ниже по тексту, а может просто виртуальная машина выделила больше памяти под Eden, например, чтобы объекты в нём успевали стать мусором до следующего цикла очистки.

Участки, которые на следующем скриншоте я обозначил красным — это как раз возрастание Old, когда некоторые объекты не успевают стать мусором, чтобы быть удалёнными из памяти ранее, и всё-таки попадают в Old. Синий участок — исключение. На протяжении красных участков можно видеть гребёнку — это Eden так себя ведёт.

На протяжении синего участка скорее всего виртуальная машина решила, что нужно увеличить размер Eden-области, потому как при увеличении масштаба в Tracer’е видно, что GC перестал «частить» и таких мелких колебаний, как ранее, теперь нет, колебания стали медленными и редкими.

Перейдём ко второму приложению:

В нём Eden напоминает мне какой-то уровень из Mortal Kombat, арену с шипами. Была такая, кажется… А График GC — шипы из NFS Hot Pursuit, вот те вот, плоские ещё.
Числа справа от названий областей указывают:
1) что Eden имеет размер в 50 мегабайт, и то, что нарисовано в конце графика, последнее из значений на текущий момент — занято 25 мегабайт. Всего он может вырости до 546 мегабайт.
2) что Old может вырости до 1,333 гига, сейчас занимает 405 МБ, и забит на 145,5 МБ.
Так же для Survivor-областей и Perm Gen.
Для сравнения — вот Вам Tracer-график за 75 часов работы второго приложения, думаю, кое-какие выводы вы сможете сделать из него. Например, что активная фаза у этого приложения — с 8:30 до 17:30 в рабочие дни, и что даже на выходных оно тоже работает :)

Если вы вдруг увидели в своём приложении, что Old-область заполнена — попробуйте просто подождать, когда она переполнится, скорее всего она заполнена уже мусором.

Мусор — это объекты, на которые нет активных ссылок из других объектов, или целые комплексы таких объектов (например, какое-то «облако» взаимосвязанных оъектов может стать мусором, если набор ссылок указывает только на объекты внутри этого «облака», и ни на один объект в этом «облаке» ничто не ссылается «снаружи»).

Это был краткий пересказ того, что я узнал про структуру хипа за время, пока гуглил.

Предпосылки

Итак, случилось сразу две вещи:
1) после перехода на более новые библиотеки/томкеты/джавы в одну из пятниц приложение, которое я уже долгое время веду, вдруг стало вести себя из рук вон плохо спустя две недели после выставления.
2) мне на рефакторинг отдали проект, который тоже вёл себя до некоторого времени не очень хорошо.

Я уже не помню, в каком точно порядке произошли эти события, но после «чёрной пятницы» я решил наконец-то разобраться с дампами памяти детальнее, чтобы это более не было для меня чёрным ящиком. Предупреждаю, что какие-то детали я мог уже запамятовать.

По первому случаю симптомы были такие: все потоки, отвественные за обработку запросов, выжраны, на базу данных открыто всего 11 соединений, и те не сказать, что используются, база говорила, что они в состоянии recv sleep, то есть ожидают, когда же их начнут использовать.
После перезагрузки приложение оживало, но прожить могло недолго, вечером той же пятницы жило дольше всего, но уже после окончания рабочего дня таки снова свалилось. Картина всегда была одинаковой: 11 соединений к базе, и лишь один, вроде бы, что-то делает.
Память, кстати, была на минимуме. Сказать, что OOM привёл меня к поиску причин, не могу, однако полученные знания при поиске причин позволили начать активную борьбу с OOM.

Когда я открыл дамп в JVVM, из него было сложно что-либо понять.

Подсознание подсказывало, что причина где-то в работе с базой.
Поиск среди классов сказал мне, что в памяти аж 29 DataSource, хотя должно быть всего 7.

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

OQL

Сидеть переклацывать в просмотровщике все эти объекты было некогда, и моё внимание наконец-то привлекла вкладка OQL Console, я подумал, что вот он, момент истины — я или начну использовать её на полную катушку, или так и забью на всё это.

Прежде, чем начать, конечно же был задан вопрос гуглу, и он любезно предоставил шпаргалку (cheat sheet) по использованию OQL в JVVM: http://visualvm.java.net/oqlhelp.html

Сначала обилие сжатой информации привело меня в уныние, но после применения гугл-фу на свет таки появился вот такой OQL-запрос:

select {instance: x, uri: x.url.toString(), connPool: x.connectionPool}
from org.apache.tomcat.dbcp.dbcp2.BasicDataSource x
where x.url != null
&& x.url.toString() == "jdbc:sybase:Tds:айпишник:порт/базаДанных"

Это уже исправленная и дополненная, финальная версия этого запроса :)
Результат можно увидеть на скриншоте:

После нажатия на BasicDataSource#7 мы попадаем на нужный объект во вкладке Instances:

Через некоторое время до меня дошло, что есть одно несхождение с конфигурацией, указанной в теге Resource в томкете, в файле /conf/context.xml. Ведь в дампе параметр maxTotal имеет значение 8, в то время, как мы указывали maxActive равным 20…

Тут-то до меня и начало доходить, что приложение жило с неправильной конфигурацией пула соединений все эти две недели!
Для краткости напишу тут, что в случае, если вы используете Tomcat и в качестве пула соединений — DBCP, то в 7м томкете используется DBCP версии 1.4, а в 8м томкете — уже DBCP 2.0, в котором, как я потом выяснил, решили переименовать некоторые параметры! А про maxTotal вообще на главной странице сайта написано :)
http://commons.apache.org/proper/commons-dbcp/
«Users should also be aware that some configuration options (e.g. maxActive to maxTotal) have been renamed to align them with the new names used by Commons Pool 2.»

Причины

Обозвал их по всякому, успокоился, и решил разобраться.
Как оказалось, класс BasicDataSourceFactory просто напросто получает этот самый Resource, смотрит, есть ли нужные ему параметры, и забирает их в порождаемый объект BasicDataSource, молча игнорируя напрочь всё, что его не интересует.
Так и получилось, что они переименовали самые весёлые параметры, maxActive => maxTotal, maxWait => maxWaitMillis, removeAbandoned => removeAbandonedOnBorrow & removeAbandonedOnMaintenance.
По умолчанию maxTotal, как и ранее, равен 8; removeAbandonedOnBorrow, removeAbandonedOnMaintenance = false, maxWaitMillis устанавливается в значение «ждать вечно».
Получилось, что пул оказался сконфигурирован с минимальным количеством соединений; в случае, если заканчиваются свободные соединения — приложение молча ждёт, когда они освободятся; и добивает всё молчанка в логах по поводу «заброшенных» соединений — то, что могло бы сразу показать, в каком именно месте

программист мудак

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

«Так быть не должно», решил я, и запилил патчик (https://issues.apache.org/jira/browse/DBCP-435, выразился в http://svn.apache.org/viewvc/commons/proper/dbcp/tags/DBCP_2_1/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java?view=markup ), патч был принят и вошёл в версию DBCP 2.1. Когда и если Tomcat 8 обновит версию DBCP до 2.1+, думаю, что админам откроются многие тайны про их конфигурации Resource :)

По поводу этого происшествия мне лишь осталось рассказать ещё одну деталь — какого чёрта в дампе было аж 29 DataSource’ов вместо всего 7 штук. Разгадка кроется в банальной арифметике, 7*4=28 +1=29.

Детальнее о том, почему нельзя закидывать Resource в файл /conf/context.xml томкета

На каждую подпапку внутри папки /webapps поднимается своя копия /conf/context.xml, а значит то количество Resource, которые там есть, следует умножать на количество приложений, чтобы получить общее количество пулов, поднятых в памяти томкета. На вопрос «что в этом случае делать?» ответ будет таким: нужно вынести все объявления Resource из /conf/context.xml в файл /conf/server.xml, внутрь тега GlobalNamingResources. Там Вы можете найти один, имеющийся по умолчанию, Resource name=«UserDatabase», вот под ним и размещайте свои пулы. Далее необходимо воспользоваться тегом ResourceLink, его желательно поместить в приложение, в проекте, внутрь файла /META-INF/context.xml — это так называемый «per-app context», то есть контекст, который содержит объявления компонентов, которые будут доступны только для разворачиваемого приложения. У ResourceLink параметры name и global могут содержать одинаковые значения.
Для примера:

<ResourceLink name="jdbc/MyDB" global="jdbc/MyDB" type="javax.sql.DataSource"/>

Эта ссылка будет выхватывать из глобально объявленных ресурсов DataSource с именем «jdbc/MyDB», и ресурс станет доступен приложению.
ResourceLink можно (но не нужно) разместить и в /conf/context.xml, но в этом случае доступ к ресурсам, объявленным глобально, будет у всех приложений, пусть даже и не будет столько копий DataSource в памяти.
Ознакомиться с деталями можно вот тут: GlobalNamingResources — http://tomcat.apache.org/tomcat-7.0-doc/config/globalresources.html#Environment_Entries, ResourceLink — http://tomcat.apache.org/tomcat-7.0-doc/config/globalresources.html#Resource_Links, также можно просмотреть эту страницу: tomcat.apache.org/tomcat-7.0-doc/config/context.html.
Для TC8 эти же страницы: http://tomcat.apache.org/tomcat-8.0-doc/config/globalresources.html и http://tomcat.apache.org/tomcat-8.0-doc/config/context.html .

После этого всё стало ясно: 11 соединений было потому, что в одном, активном DataSource было съедено 8 соединений (maxTotal = 8), и ещё по minIdle=1 в трёх других неиспользуемых DataSource-копиях.

В ту пятницу мы откатились на Tomcat 7, который лежал рядышком, и ждал, когда от него избавятся, это дало время спокойно во всём разобраться.
Плюс позже, уже на TC7, обнаружилась утечка соединений, всё благодаря removeAbandoned+logAbandoned. DBCP радостно сообщил в логфайл catalina.log о том, что

"org.apache.tomcat.dbcp.dbcp.AbandonedTrace$AbandonedObjectException: DBCP object created 2015-02-10 09:34:20 by the following code was never closed:
	at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.setStackTrace(AbandonedTrace.java:139)
	at org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:81)
	at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
	at наш.пакет.СуперКласс.getConnection(СуперКласс.java:100500)
	at наш.пакет.СуперКласс.плохойПлохойМетод(СуперКласс.java:100800)
	at наш.пакет.СуперКласс.вполнеВменяемыйМетод2(СуперКласс.java:100700)
	at наш.пакет.СуперКласс.вполнеВменяемыйМетод1(СуперКласс.java:100600)
	ещё куча строк..."

Вот этот вот плохойПлохойМетод имеет в сигнатуре Connection con, но внутри была конструкция «con = getConnection();», которая и стала камнем преткновения. СуперКласс вызывается редко, поэтому на него и не обращали внимания так долго. Плюс к этому, вызовы происходили, я так понимаю, не во время рабочего дня, так что даже если что-то и подвисало, то никому уже не было дела до этого. А в ТуСамуюПятницу просто звёзды сошлись, начальнику департамента заказчика понадобилось посмотреть кое-что :)

Приложение №2

Что же касается «события №2» — мне отдали приложение на рефакторинг, и оно на серверах тут же вздумало упасть.
Дампы попали уже ко мне, и я решил попробовать поковырять и их тоже.
Открыл дамп в JVVM, и «чё-то приуныл»:

Что можно понять из Object[], да ещё и в таком количестве?
( Опытный человек, конечно же, увидел уже причину, правда? :) )

Так у меня зародилась мысль «ну неужели никто ранее не занимался этим, ведь наверняка уже есть готовый инструмент!». Так я наткнулся на этот вопрос на StackOverflow: http://stackoverflow.com/questions/2064427/recommendations-for-a-heap-analysis-tool-for-java.
Посмотрев предложенные варианты, я решил остановиться на MAT, надо было попробовать хоть что-то, а это открытый проект, да ещё и с куда бОльшим количеством голосов, чем у остальных пунктов.

Eclipse Memory Analyzing Tool

Итак, MAT.
Рекомендую скачивать последнюю версию Eclipse, и устанавливать MAT туда, потому как самостоятельная версия MAT ведёт себя плохо, там какая-то чертовщина с диалогами, в них не видно содержимого в полях. Быть может кто-то подскажет в комментариях, чего ему не хватает, но я решил проблему, установив MAT в Eclipse.

Открыв дамп в MAT я запросил выполнение Leak Suspects Report.


Удивлению не было предела, честно говоря.

1.2 гига весят соединения в базу.

Каждое соединение весит от 17 до 81 мегабайта.

Ну и ещё «немного» сам пул.
Визуализировать проблему помог отчёт Dominator Tree:

Причиной всех падений оказались километры SQLWarning’ов, база настойчиво пыталась дать понять, что «010SK: Database cannot set connection option SET_READONLY_TRUE.», а пул соединений BoneCP не вычищает SQLWarning’и после освобождения и возврата соединений в пул (может быть это где-то можно сконфигурировать? Подскажите, если кто знает).
Гугл сказал, что такая проблема с Sybase ASE известна ещё с 2004 года: https://forum.hibernate.org/viewtopic.php?f=1&t=932731
Если вкратце, то «Sybase ASE doesn’t require any optimizations, therefore setReadOnly() produces a SQLWarning.», и указанные решения всё ещё работают.
Однако это не совсем решение проблемы, потому как решение проблемы — это когда при возврате соединения в пул все уведомления базы очищаются в силу того, что они уже никогда никому не понадобятся.
И DBCP таки умеет делать это: http://svn.apache.org/viewvc/commons/proper/dbcp/tags/DBCP_1_4/src/java/org/apache/commons/dbcp/PoolableConnectionFactory.java?view=markup, метод passivateObject(Object obj), в строке 687 можно увидеть conn.clearWarnings();, этот вызов и спасает от километров SQLWarning’ов в памяти.
Об этом я узнал из тикета: https://issues.apache.org/jira/browse/DBCP-102
Также мне подсказали про вот такой тикет в багтрекере: https://issues.apache.org/jira/browse/DBCP-234, но он касается уже версии DBCP 2.0.

В итоге я перевёл приложение на DBCP (пусть и версии 1.4). Пусть нагрузка на сервис и немаленькая (от 800 до 2к запросов в минуту), но всё же приложение ведёт себя хорошо, а это главное. И правильно сделал, потому как BoneCP уже пять месяцев не поддерживается, правда, ему на смену пришёл HikariCP. Нужно будет посмотреть, как дела в его исходниках…

Сражаемся с OOM

Впечатлившись тем, как MAT мне всё разложил по полочкам, я решил не забрасывать этот действенный инструмент, и позже он мне пригодился, потому как в первом приложении ещё остались всяческие «неучтёнки» — неучтённые вещи в коде приложения или коде хранимых процедур, которые иногда приводят к тому, что приложение склеивает ласты. Я их отлавливаю до сих пор.

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

И если нажать на надпись See stacktrace, то да, это будет как раз банальный случай, когда какой-то поток вдруг внезапно упал при попытке отмаршалить результат своей работы.

Однако здесь ничто не указывает на причину возникновения OOM, здесь лишь результат. Найти причину мне пока-что, в силу незнания всей магии OQL в MAT, помогает именно JVVM.
Загружаем дамп там, и пытаемся отыскать причину!

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

Два SybCallableStatement, и один SybPreparedStatement.
Думаю, что дело усложнится, если Statement’ов будет куда больше, но немного подрихтовав один из следующих запросов, указав в where нужные условия, думаю, всё у Вас получится. Плюс, конечно же, стоит хорошенько посмотреть в MAT, что за результаты пытается отмаршалить поток, какой объект, и станет понятнее, какой именно из Statement’ов необходимо искать.

select {
    instance: x,
    stmtQuery: x._query.toString(),
    params: map(x._paramMgr._params, function(obj1) {
            if (obj1 != null) {
                if (obj1._parameterAsAString != null) {
                    return '''+obj1._parameterAsAString.toString()+''';
                } else {
                    return "null";
                }
            } else {
                return "null";
            }
        })
    }
from com.sybase.jdbc4.jdbc.SybCallableStatement x
where x._query != null


Не то, это «внутренние» вызовы.

select {
    instance: x,
    stmtQuery: x._query.toString(),
    params: map(x._paramMgr._params, function(obj1) {
            if (obj1 != null) {
                if (obj1._parameterAsAString != null) {
                    return '''+obj1._parameterAsAString.toString()+''';
                } else {
                    return "null";
                }
            } else {
                return "null";
            }
        })
    }
from com.sybase.jdbc4.jdbc.SybPreparedStatement x
where x._query != null


А вот и дичь!
Для чистоты эксперимента можно кинуть такой же запрос в любимой БД-IDE, и он будет очень долго отрабатывать, а если покопаться в недрах хранимки, то будет понятно, что там просто из базы, которая нам не принадлежит, выбирается 2 миллиона строк по такому запросу с такими параметрами. Эти два миллиона даже влазят в память приложения, но вот попытка отмаршалить результат становится фатальной для приложения. Такое себе харакири. :)
При этом GC старательно убирает все улики, но не спасло его это, всё же источник остался в памяти, и он будет наказан.

Почему-то после всего этого рассказа почувствовал себя тем ещё неудачником.

Прощание

Вот и закончилось моё повествование, надеюсь, Вам понравилось :)
Хотел бы выразить благодарность своему начальнику, он дал мне время во всём этом разобраться. Считаю эти новые знания очень полезными.
Спасибо девушкам из Scorini за неизменно вкусный кофе, но они не прочтут этих слов благодарности — я даже сомневаюсь, что они знают о существовании Хабрахабра :)
Хотелось бы увидеть в комментариях ещё больше полезной инфы и дополнений, буду очень благодарен.

Думаю, самое время почитать документацию к MAT…

UPD1: Да, совсем забыл рассказать про такие полезные вещи, как создание дампов памяти.
docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/clopts.html#gbzrr
Опции
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/disk2/dumps
весьма полезны для генерации дампов в момент падения приложения по OutOfMemoryError,
а также существует возможность снять дамп памяти с приложения «наживо», посреди его работы.
Для этого существует утилита jmap.
Пример вызова для винды:
«C:installPSToolsPsExec.exe» -s «C:Program FilesJavajdk1.7.0_55binjmap.exe» -dump:live,format=b,file=C:dump.hprof 3440
последний параметр — это PID java-процесса. Приложение PsExec из набора PSTools позволяет запускать другие приложения с правами системы, для этого служит ключ «-s». Опция live полезна, чтобы перед сохранением дампа вызвать GC, очистив память от мусора. В случае, когда возникает OOM, чистить память незачем, там уже не осталось мусора, так что не ищите, как можно установить опцию live в случае возникновения OOM.

UPD2 (2015-10-28) | Случай номер два три
(Было принято решение дописать это сюда как апдейт, а не пилить новую статью о том же самом):
Ещё один интересный случай, но уже с Оракловой базой.
Один из проектов использует фичу с XML, проводит поиски по содержимому сохранённого XML-документа. В общем, этот проект иногда давал о себе знать тем, что вдруг внезапно один из инстансов переставал подавать признаки жизни.
Почуяв «хороший» случай потренироваться

на кошках

, я решил посмотреть его дампы памяти.

Первое, что я увидел, было «у вас тут много коннектов в памяти осталось». 21к!!! И какой-то интересный oracle.xdb.XMLType тоже давал жару. «Но это же Оракл!», вертелось у меня в голове. Забегая вперёд скажу что таки да, он виноват.

Итак, видим кучу T4CConnection, которые лежат в HashMap$Entry. Обратил внимание сразу, что вроде бы и SoftHashMap, что, вроде как, должно означать, что оно не должно вырастать до таких размеров. Но результат видите и сами — 50-60 килобайт в коннекте, и их реально МНОГО.

Посмотрев, что собой представляют HashMap$Entry — увидел, что примерно картина одинакова, всё связано с SoftHashMap, с Оракловыми коннектами.

Что, собственно, подтверждалось такой картинкой. HashMap$Entry было просто море, и они более-менее сакуммулировались внутри oracle.xdb.SoftHashMap.
В следующем дампе картина была примерно такой же. По Dominator Tree было видно, что внутри каждого Entry находится тяжёлый такой BinXmlProcessorImpl.

-=-=-
Если учесть, что я в тот момент был не силён в том, что такое xdb, и как он связан с XML, то, несколько растерявшись, я решил, что надо бы погуглить, быть может кто-то уже в курсе, что со всем этим нужно делать. И чутьё не обмануло, по запросу «oracle.xdb.SoftHashMap T4CConnection» нашлось
раз piotr.bzdyl.net/2014/07/memory-leak-in-oracle-softhashmap.html
и два leakfromjavaheap.blogspot.com/2014/02/memory-leak-detection-in-real-life.html
Утвердившись, что тут всё-таки косяк у Оракла, дело оставалось за малым.
Попросил администратора БД посмотреть информацию по обнаруженной проблеме:

xxx: Ключевые слова: SoftHashMap XMLType
yyy: Bug 17537657 Memory leak from XDB in oracle.xdb.SoftHashMap
yyy: The fix for 17537657 is first included in
12.2 (Future Release)
12.1.0.2 (Server Patch Set)
12.1.0.1.4 Database Patch Set Update
12.1.0.1 Patch 11 on Windows Platforms
yyy: нда. Описание
Description
When calling either getDocument() using the thin driver, or getBinXMLStream()
using any driver, memory leaks occur in the oracle.xdb.SoftHashMap class.
BinXMLProcessorImpl classes accumulate in this SoftHashMap, but are never
removed.
xxx: Всё так и есть :)

Вот описание фикса: updates.oracle.com/Orion/Services/download?type=readme&aru=18629243 (для доступа требуется учётка в Оракл).
-=-=-
После применения фикса инстансы нашего приложения живут уже месяц, и пока без эксцессов. *постучал по дереву* *поплевал через левое плечо*
Успехов Вам в поисках!

Причина ошибки «Out of memory» на VPS

Каждому виртуальному серверу назначается фиксированный объём оперативной памяти, в зависимости от выбранного тарифного плана: от 1ГБ до 32ГБ.

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

В результате некоторые службы на сервере перестают работать, сервер часто перегружается и «зависает» в целом, выдавая ошибку «out of memory» (OOM) — нехватка операционной памяти.

Если процесс завершается в целях экономии памяти, она регистрируется в системных журналах и хранится в /var/log/, где вы можете найти подобное сообщения о нехватке памяти:

Jav 11 17:12:34 ovzhost114 kernel: [63353551.892881] Out of memory in UB 33222955: OOM

killed process 110919 (mysqld) score 0 vm:404635kB, rss:06665kB, swap:0kB

В зависимости от дистрибутива Linux и конфигурации системы, вид этой записи может меняться.

Как решить ошибку «Out of memory» на VPS

Узнайте какие процессы запущены

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

  • Использование памяти можно отслеживать, например, с помощью команды:

free -h,

которая предоставляет текущую статистику памяти. К примеру, результаты, предоставленные системой в 1ГБ, будут выглядеть примерно так:

total used free shared buffers

cached

Mem

993M 738M 255M 5.7M 64M

439M

-/+ buffers/cache:

234M 759M

Swap:

0B 0B 0B
  • Ещё одним полезным инструментом для мониторинга памяти является «top», который отображает полезную, постоянно обновляемую информацию об использовании памяти и ЦП, времени выполнения процессов и другой статистике. Это особенно полезно для определения ресурсоёмких задач.

Программа будет работать до тех пор, пока вы не выйдете их неё нажатием «q». Использование ресурсов отображается в процентах и ​​предоставляет лаконичный обзор нагрузки на вашу систему.

Снизьте потребление оперативной памяти

Ограничьте работу ресурсоёмких плагинов и удалите лишние расширения и плагины сайта.

Оптимизируйте настройки MySQL с помощью Mysqltuner

Mysqltuner – это высокопроизводительный сценарий для настройки MySQL, который предоставляет подробную информацию о состоянии и работоспособности сервера MySQL, и даёт конкретные рекомендации по улучшению и повышению производительности.

  1. Чтобы установить mysqltuner, запустите следующие команды, в зависимости от ОС:

Debian/Ubuntu:

sudo apt-get -y install mysqltuner

CentOS:

sudo yum -y install mysqltuner

  1. Теперь можно запустить Mysqltuner: mysqltuner

В результате анализа вы получите крайне полезную информацию. Обратите внимание на раздел Recommendations.

  1. После строки Variables to adjust указаны параметры, которые следует изменить или дописать в случае их отсутствия в файле my.cnf.

Вы сможете найти этот файл в директории:

Debian/Ubuntu:

/etc/mysql/my.cnf

CentOS:

/etc/my.cnf

  1. Перезагрузите MySQL с помощью команд:

Debian/Ubuntu:

sudo /etc/init.d/mysql restart

CentOS:

sudo systemctl restart mariadb

Оптимизируйте настройки Apache

Неправильная настройка параметров Apache может стать огромной головной болью и привести к нехватке оперативной памяти VPS.

Вы можете выполнить следующие действия:

  1. Измените файл httpd.conf следующим образом. Такие параметры подходят для сервера с оперативной памятью в 1 ГБ.

KeepAlive Off

MaxKeepAliveRequests

100

KeepAliveTimeout

15

StartServers

2

ServerLimit

2

MinSpareThreads

50

MaxSpareThreads

100

ThreadLimit

100

ThreadsPerChild

50

MaxClients

100

MaxRequestsPerChild

10000
  1. Кроме того, этот код можно внести в отдельный файл с расширением .conf и сохранить его в директории /etc/httpd/conf.d.
  2. Перезагрузите Apache: apachectl restart

Установите Nginx

Nginx служит хорошим балансировщиком нагрузки в сочетании с Apache и потребляет значительно меньше памяти. Больше о нём вы сможете узнать из нашей статьи Что такое nginx и как правильно его настроить.

Включите кэширование контента

Включение кэша вашего сайта уменьшит возникающие ошибки. Этот способ будет особенно полезен, если ваш сайт получает огромный объём трафика.

Перейдите на более высокий тарифный план

При нехватке оперативной памяти рекомендуется выбрать другой тариф VPS. Вы можете ознакомиться с тарифами VDS/VPS на нашем сайте.

Закажите услугу «Администрирование по запросу»

Услуга «Администрирование по запросу» может существенно облегчить вам решение этой проблемы. Просто доверьтесь специалистам RU-CENTER, и они сделают всю сложную работу за вас.

Ошибка «Out of Memory» обычно появляется, когда на компьютере запущено много программ, использующих ресурсы, доступные для компьютера. Компьютерная память или ОЗУ (оперативное запоминающее устройство) используется компьютером для быстрого хранения данных для их обработки.

Структура статьи

  • 1 Когда появляется эта ошибка?
  • 2 Причина ошибки «Out of Memory»
  • 3 Как исправить ошибку «Out of Memory»
  • 4 Чтобы избежать проблем, тщательно следуйте этим инструкциям.
  • 5
    Отсюда, следуйте этим шагам в зависимости от вашей операционной системы

Когда появляется эта ошибка?

Как я уже отмечал выше, запуск сразу нескольких программ может перегрузить объем доступной свободной памяти, что приведет к ошибке «Out of Memory». Это может случиться как с новыми программами, так и с уже запущенными на компьютере программами. Иногда это может произойти, независимо от объема доступной свободной памяти.

Причина этих ошибок немного сложнее. Подсистема WIN32 Windows имеет ограниченный объем доступной памяти. Если память в куче рабочих столов подсистемы WIN32 используется. Windows может выдавать сообщение об ошибке «Out of Memory».

Компьютеры, работающие не так, как операционные системы Microsoft Windows, не слишком уязвимы. Эта проблема в основном существует для пользователей Windows NT 3.5 и Windows NT 3.1

Как исправить ошибку «Out of Memory»

Чтобы исправить эту проблему, вам необходимо отредактировать свой реестр Windows. Редактирование реестра является рискованным занятием. Действовать нужно с осторожностью, и только строго по инструкции:

  • Резервное копирование реестра — так что вы можете восстановить его позже, если что-то пойдет не так.
  • Нажмите здесь, чтобы узнать, как создать резервную копию и восстановить реестр.

Чтобы избежать проблем, тщательно следуйте этим инструкциям.

  • Увеличьте размер кучи рабочего стола, чтобы исправить эту проблему.
  • Запустите редактор реестра, открыв диалоговое окно RUN с помощью сочетания клавиш Windows_Key + R или из меню «Пуск». В диалоговом окне RUN введите regedit для запуска Regedt32.exe.
  • Из поддерева HKEY_LOCAL_MACHINE,
    Перейдите к следующему разделу:
  • System CurrentControlSet Control Session Manager SubSystems
  • Выберите значение Windows.
  • Выберите «Строка» в меню «Правка».
  • Увеличить параметр SharedSection


Отсюда, следуйте этим шагам в зависимости от вашей операционной системы

Для Windows NT:

  • SharedSection используется для определения размера системы и рабочего стола, он использует следующие параметры
  • SharedSection = XXXX, YYYY
  • Добавить «, 256» или «, 512» после номера yyyy.

Для Windows 2000, Windows XP и Windows Server 2003:

  • SharedSection используется для определения размера системы и рабочего стола, он использует следующие параметры
  • SharedSection = XXXX, YYYY, ZZZZ

Для 32-разрядных операционных систем

  • Увеличьте значение yyyy до «12288» и увеличьте значение zzzz до «1024».

Для 64-разрядных операционных систем

  • Увеличьте значение yyyy до «20480»; Увеличьте значение zzzz до «1024».

Есть свой вариант быстрого решения ошибки «Out of Memory»? Пишите его в форму комментариев к этой статье, и если ваш вариант окажется полезным, мы обязательно дополним руководство.

Понравилась статья? Поделить с друзьями:
  • Почему ошибка dns на xbox 360
  • Почему ошибка 502 но сайт работает
  • Почему ошибка 502 bad gateway что значит
  • Почему не могу зарегистрироваться в инстаграм выдает ошибку
  • Почему не могу заказать на алиэкспресс выдает ошибку