2015-11-25 4 views
2

Я использую VisualVM для наблюдения за моим экземпляром JBoss. Я также добавил скриншот.Visual VM показывает странное поведение

Проблема заключается в том, что после перезапуска экземпляра JBoss процессор на ОС начинает подниматься высоко. Нагрузка может достигать 40, а процесс JAVA в верхней команде показывает до 300% использования.

Это значит, что это замедляет приложение на переднем конце.

VisualVM показывает, что процессор высокий, и количество потоков увеличивается.

Как я могу далее перейти к первопричине этого?

Visual VM output - General

ответ

1

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

  1. Частое GC потребляя CPU
  2. Темы потребляющих CPU

Для диагностики # 1 далее, что позволяет GC Logging может быть лучшим способом. Тем не менее, вы можете использовать jstat, а также:

jstat -gc PID 60s

выше команда будет собирать использования памяти и сборки мусора детали из виртуальной машины Java каждые 60-е годы. В среде отладки 60-е годы должны быть в порядке, но в производственной среде должно быть достаточно 3600. jstat - очень легкий вес, не создает никаких неблагоприятных последствий. Результат поможет вам понять, есть ли частые GC (майор/минор). Частая крупная коллекция - проблема наверняка (она приостанавливает приложение), однако очень частая небольшая коллекция может также вызвать высокий процессор (приложение слишком часто создает слишком много мусора). Если это так, возможно, вам нужен главный дамп, и вам нужно понять детали использования памяти приложения, но не раньше этого. Помните, что захват дампа кучи может «повесить» ваше приложение (я не предлагаю его на производстве, если вы не можете перезапустить приложение сразу после захвата данных).

Для диагностики № 2 «верх» предоставляет опцию («Н») для проверки процессора, потребляемого отдельными потоками. Это будет указывать (в реальном времени) потоки приложений, которые потребляют процессор. Также (как предложили другие), захватите 5/6 потоки резьбы с интервалом в 10 секунд каждый. Ищет потоки в состоянии RUNNABLE. Это потоки, которые выполняют работу и, следовательно, занимают центральный процессор. Является ли тот же (набор) поток застрял в состоянии Runnable по нескольким дампам? Вероятно, у вас есть проблема.

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

1

Хорошая стартовая точка будет генерировать дамп кучи, и использовать Heap инструмент анализатор самосвала, чтобы увидеть, что происходит под капотом, и просматривать его с VisualVM

Некоторые бесплатные альтернативы вы Eclipse MAT или IBM HeapAnalyzer

0

Понимание увеличения количества потоков довольно просто. Захватите несколько aaddumps и сравните созданные новые потоки.

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

0

Да, но из-за проблем 2 мы можем найти из дампа потока. 1. Использование CPU быстро увеличивается с 20% до 90% за 15-20 минут. Мы не можем сделать это в других средах. 2. К тому времени, когда мы берем дамп потока, фактический поток, который может вызвать проблему, будет завершен, и мы найдем другие потоки, которые ждут ресурсов.

Есть ли другой способ, который можно настроить или проверить на стороне сервера?

Смежные вопросы