Как обнаружить Из условия Памяти?

Основное различие - то, что при использовании синхронизируемого блока, можно соединить объект кроме это , который позволяет быть намного более гибким.

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

Object writeLock = new Object();

И с этого времени каждый раз, производители хотят добавить новое сообщение, мы просто соединяем это:

synchronized(writeLock){
  // do something
}

, Таким образом, потребители могут все еще читать, и производители будут заблокированы.

8
задан Kara 1 February 2014 в 20:25
поделиться

8 ответов

Я вижу два варианта, если вы хотите автоматизировать дамп кучи, но решение @ Mark с дампом кучи в OOM неудовлетворительно.

  1. Вы можете использовать MemoryMXBean для обнаружения высокого давления памяти, а затем программно создает дамп кучи , если использование (или дельта использования) кажется высоким.
    • Вы можете периодически получать информацию об использовании памяти и генерировать дампы кучи с помощью сценария оболочки cron, используя jmap (работает как локально, так и удаленно).

Было бы неплохо, если бы у вас был обратный вызов на OOM, но, ммм, этот обратный вызов, вероятно, просто вылетит из-за ошибки OOM. :)

5
ответ дан 5 December 2019 в 07:12
поделиться

Вы можете передать следующие аргументы JVM при запуске, и дамп кучи будет автоматически создан при ошибке OutOfMemoryError. Второй аргумент позволяет указать путь к файлу дампа кучи. По крайней мере, используя это, вы могли бы проверить наличие определенного файла, чтобы увидеть, произошел ли дамп кучи.

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=<value>
10
ответ дан 5 December 2019 в 07:12
поделиться

Вы смотрели JConsole ? Он использует JMX, чтобы предоставить вам видимость различных показателей JVM, включая информацию о памяти. Вероятно, стоило бы отслеживать ваше приложение, используя это для начала, чтобы понять, как и когда потребляется память. Вы можете обнаружить, что память расходуется равномерно в течение дня или при использовании определенных функций.

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

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

4
ответ дан 5 December 2019 в 07:12
поделиться

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

Может, даже веб-сфера сможет сделать это за вас!?

2
ответ дан 5 December 2019 в 07:12
поделиться

Вы можете добавить класс слушателя (прослушиватель атрибута области действия или области действия приложения), который будет вызываться каждый при добавлении нового объекта в область сеанса / приложения.

В этом случае вы можете попытаться проверить общую память, используемую приложением (зарегистрировать его), как вызов run gc (обратите внимание, что его вызов не означает, что gc всегда будет запускаться )

(Вышеуказанное относится к части ведения журнала и gc в зависимости от роста использования)

Для запланированного gc: Кроме того, вы можете сохранить класс задачи таймера, который запускается каждые несколько часов и выполняет запрос gc.

1
ответ дан 5 December 2019 в 07:12
поделиться

Наш опыт работы с ITCAM был далеко не лучшим с точки зрения мониторинга. Мы отказались от него в пользу CA Wily Introscope.

1
ответ дан 5 December 2019 в 07:12
поделиться

Приходилось ли вам знакомиться с инструментом jvisualvm в последней версии Java 6 JDK?

Он отлично подходит для проверки работающего кода.

0
ответ дан 5 December 2019 в 07:12
поделиться

Я бы поспорил, что вам нужны дампы кучи, когда происходит OOM. Периодический сбор информации с течением времени должен дать представление о том, что происходит.

Как уже отмечалось, существуют различные инструменты для анализа этих проблем. Я добился успеха с ITCAM для WebSphere, и, как специалист IBM, я имею к нему доступ. Мы очень быстро смогли определить точные строки кода в проблемной ситуации.

Если есть какой-то способ получить инструмент такого рода, то это '

0
ответ дан 5 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

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