Как отловить ошибки OutOfMemory в Amazon EBS (Elastic BeanStalk)

Вот вам непростая задача - у нас есть веб-приложение Java, развернутое на веб-серверах Tomcat на Amazon ElasticBeanStalk. и мы считаем, что у нас есть утечка памяти, b / c кажется, что JVM вылетает каждую ночь с исключением OutOfMemory. Проблема в том, что после сбоя EBS автоматически удаляет старый экземпляр EC2 и запускает новый. все журналы и информация тоже удаляются ...

Сейчас я разрабатываю настраиваемую метрику CloudWatch для мониторинга памяти JVM (вы могли подумать, что должна быть подготовленная ...), но это не поможет мне сгенерировать дампы кучи.

Кто-нибудь сталкивался с подобной проблемой и знает, как отловить эти ошибки на EBS?


person Sharon Ben Asher    schedule 07.08.2012    source источник
comment
Я как-то чувствую, что ваша проблема непонятна. У нас тоже есть серверы tomcat на Amazon EBS, и я пару раз видел ошибку нехватки памяти, но ошибка приводит к сбою только tomcat и не влияет на экземпляр EC2. Думайте о своем экземпляре EBS как о обычном сервере. Сбой в Tomcat никогда не перезагрузит машину.   -  person Kamal    schedule 07.08.2012
comment
EBS - это эластичный beanstalk, а не служба хранения (S3). Частью функций EBS является автоматическая балансировка нагрузки, при которой вы определяете минимальный и максимальный экземпляры, которые автоматически запускаются и завершаются в зависимости от текущего трафика. минимальное количество экземпляров не может быть меньше 1, поэтому, если у вас есть один работающий экземпляр, а tomcat перестает отвечать на HTTP-запросы, EBS автоматически завершит работу экземпляра EC2 и запустит новый. разве это не самая основная особенность EBS ???   -  person Sharon Ben Asher    schedule 17.10.2012


Ответы (2)


Это определенно звучит как необычное поведение экземпляра EC2 (не EBS). Интересно, что если Tomcats упадет, это затронет экземпляр машины (с точки зрения остановки или завершения).

Вот что я бы посоветовал диагностировать:

  1. получить работающий экземпляр, прочитанный, чтобы изучить / поиграть с
  2. взгляните на «Termination Protection» - установлено ли для него значение «включено» или нет - это может объяснить часть проблемы, относящуюся к «списанию» (если под отказом вы имеете в виду, что экземпляр завершает работу и удаляется). Это можно найти в свойствах вашего экземпляра EC2 с помощью консоли AWS.
  3. взгляните на настройки памяти Java, с которыми настроен ваш сервер Tomcat. Возможно, макс (Xmx) больше, чем у виртуальной машины !? Если это так, возможно, Tomcat буквально запускает машину из-за нехватки памяти, что может объяснить некоторые из ответов EC2 на вашу нехватку памяти. Я предполагаю, что вы имеете в виду «остановлен», а не «списан», иначе как вы узнаете, что у вас ошибка нехватки памяти?
  4. если вы вручную завершите процесс tomcat / java на рабочем экземпляре, останется ли экземпляр в рабочем состоянии (или вы загрузитесь и экземпляр будет остановлен)? Если что-то происходит просто потому, что вы остановили tomcat, это означает, что какой-то процесс мониторинга явно запускает и останавливает машину.
  5. используйте -XX: -HeapDumpOnOutOfMemoryError для создания файла дампа - это поможет вам выяснить, где находится ваша утечка, и, надеюсь, устранить основную причину.

Удачи. Надеюсь, это поможет.

person Paul Jowett    schedule 07.08.2012
comment
привет jowierun, извините за поздний ответ. это проблема EBS, а не EC2 (см. мой комментарий к сообщению с вопросом, балансировка нагрузки EBS - это некоторый процесс мониторинга, о котором вы говорите. Он работает поверх EC2, но отвечает за списание экземпляра и запуск нового) мы никогда действительно устранили проблему утилизации экземпляра, но мы исправили проблему нехватки памяти, заменив openjdk на точку доступа и обновившись до последней версии AWS SDK. Я посмотрю на Termination Protection и вручную убью кота - person Sharon Ben Asher; 17.10.2012

Рассмотрим службу сбора журналов, такую ​​как Sumologic. Указанные вами файлы журналов собираются и доступны для онлайн-анализа. Таким образом, даже если ваши экземпляры EC2 будут заменены, вы можете провести судебно-медицинскую экспертизу, чтобы узнать, что с ними произошло.

person Sco    schedule 23.04.2015