2010-09-09 1 views
8

Я рассматриваю нагнетание сценарий дляКак «дорого» это выполнить jstack на запущенной JVM?

  1. запустить один раз в минуту (или каждые пять минут)
  2. выполнения jstack против работающей виртуальной машины Java в производстве
  3. разобрать вывод jstack и подсчитывать вещи, которые я «заинтересован в
  4. экспорт результаты для построения графиков 24/365 централизованной установки Кактусы на другом сервере

Но я не имею ни малейшего понятия о том, как дорого или invasi ve jstack находится на запущенной JVM. Насколько дорого стоит jstack для запуска JVM? Я настраиваю себя на мир боли?

+0

Вы считали измерение? –

+0

Вместо запуска jstack как отдельного процесса, как насчет запуска простого профайлера внутри приложения? Это было бы более эффективно, потому что не требуется накладные расходы сети. Я написал такой инструмент: http://code.google.com/p/h2database/source/browse/trunk/h2/src/main/org/h2/util/Profiler.java - вы также можете преобразовать его в a. jsp, если необходимо. –

+0

@ Thorbjørn Ravn Andersen: Pardon? –

ответ

0

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

+0

1000 потоков, <1 ГБ кучи. Я считаю jstack, потому что знаю это и могу быстро реализовать. JMX, в то время как жизнеспособный вариант, собирается немного ослабить. –

3

Измерение. Один из вариантов time (/ USR/бен/время я считаю) имеет параметр -p, который позволяет видеть используются ресурсы центрального процессора:

ravn:~ ravn$ /usr/bin/time -p echo Hello World 
Hello World 
real   0.32 
user   0.00 
sys   0.00 
ravn:~ ravn$ 

Это означает, что потребовалось 0,32 секунд времени стены, используя 0.00 сек времени процессора в пользовательском пространстве и 0,00 секунды в пространстве ядра.

Создайте тестовый сценарий, в котором у вас запущена программа, но ничего не предпринимается, и попробуйте сравнить с использованием WITH и без jstack, например, каждую секунду. Тогда у вас есть жесткие цифры и вы можете поэкспериментировать, чтобы увидеть, что даст разумные накладные расходы.

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

+0

OK: реальный 0.54, пользователь 0.51, sys 0.07 на слегка загруженной системе. Попробуем позже сегодня. Кроме того, сколько времени требуется, какое влияние на JVM оказывает jstack? Все останавливаются? –

+0

Не забудьте измерить ваше приложение, а не вызов jstack. –

+0

Это веб-приложение работает в Tomcat. Hmmm ... возможно, мне нужно запустить jstack в цикле и сравнить количество запросов в минуту с использованием процессора в процессе Java Tomcat. Спасибо, предлагая это и помогая продумать это. –

3

Я знаю, что этот ответ опоздал на вечеринку, но дорогая часть jstack идет прикрепление к интерфейсу отладчика обычно не генерируя трассировку стека с важным исключением (и размер кучи не имеет значения):

Произвольные трассировки стека могут генерироваться только в безопасной точке или пока поток ожидает (т.е. вне области java). Если поток ожидает/выходит за пределы java, поток, запрашивающий поток, будет нести задачу, выполняя стековый переход самостоятельно. Однако вы, возможно, не захотите «прервать» поток, чтобы пройти свой собственный стек, например, когда он удерживает блокировку (или выполняет некоторое ожидание). Поскольку нет способа контролировать безопасные точки - это нужно учитывать риск.

Другой вариант по сравнению с jstack, не связанный с интерфейсом отладки: Thread.getAllStackTraces() или используя ThreadMXBean, запускать его в процессе, сохранять в файл и использовать внешний инструмент для опроса этого файла.

Последнее примечание: я обожаю jstack, он огромен на производственной системе.

+0

+1 для преследования меня;) но серьезно, спасибо за ответ. –

+0

@StuThompson, я тоже хочу ответить на этот вопрос: http://stackoverflow.com/questions/3651737/why-the-odd-performance-curve-differential-between-bytebuffer-allocate-and-byt короткий ответ что непрямые буферы сосать для реального io, если вам нужна более подробная информация, я могу попробовать ... Я не много публикую, и я склонен проверять профили людей, чьи сообщения меня интересовали. На этот вопрос не было ответа, поэтому я надеялся, что смогу просветить его. – bestsss

+0

um, я искал что-то большее, чем * «непрямые буферы сосать» * ... это то, что я очень хорошо документировал сам с бенчмарками;) Мне действительно любопытно расхождение в скале. –