2015-09-15 3 views
1

У меня есть процесс Java, и я начинаю его (как это было предложено здесь: parameters for FR) длительности с параметрами:опции Java Flight Recorder не работает, и файл сохраняется только в конце установки

-XX: + UnlockCommercialFeatures -XX: + FlightRecorder -XX: StartFlightRecording = duration = 2m, filename = myflightrecord.jfr -XX: FlightRecorderOptions = maxsize = 100k, maxage = 1m

для получения информации о полете.

Я бы ожидать, что MaxAge = 1м даст мне только одну минуту записи и MAXSIZE размер = 100k файл не был бы больше, чем 100Кб, но ни один из них не работает, как ожидалось.

Другая проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы файл хранился каждый промежуток времени, давайте предположим каждую минуту. Но файл «myflightrecord.jfr» пуст до достижения продолжительности (2 минуты в примере).

Есть ли способ сделать полевой регистратор заподлицо до конца продолжительности?

пс: Версия Java я использую JDK1.8.0_45

ответ

2

MaxAge и опции MaxSize применяются только когда у вас есть непрерывная запись (= не установлен срок). Я также считаю, что они являются лишь ориентирами, а не точными ограничениями.

Если вы хотите, чтобы данные были сброшены на диск для непрерывной записи, вы можете установить disk = true, и если вы хотите указать, где данные должны закончиться, вы можете установить репозиторий = путь (я считаю, что данные будут удаляться только на диск, когда буферы в памяти заполнены, я не уверен, что если потоки локальных буферов заполнены или когда глобальные буферы заполнены, см. слайд 13 в этом slidedeck для изображения, описывающего это : http://www.slideshare.net/marcushirt/java-mission-control-java-flight-recorder-deep-dive)

См. https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html XX: FlightRecorderOptions для получения дополнительной информации. Вы также можете проверить threadbuffersize и globalbuffersize.

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

Kire Haglin может исправить меня, где я неправильно понял.

+0

Я попробовал варианты, которые вы предложили, но все равно ничего не получил. Я снова проведу параметры (вероятно, продолжительность - это параметр, который не сочетается со всеми параметрами?) И дайте знать! Спасибо за ответ – pokeRex110

+0

Как вы могли бы рассказать по многословию моего ответа, постоянно получать данные JFR, это не поддержка, которую мы поддерживаем, поэтому вам нужно будет играть с флагами и т. Д., Чтобы достичь этого. – Klara

+0

Вы можете комбинировать maxage, maxsize и продолжительность, но, скорее всего, это не то, что вы хотите сделать. –

3

Это для JDK 7 и JDK 8 (Hotspot) и JDK 5 и 6 (JRockit).

Во-первых, MAXSIZE и MaxAge работает только если у вас есть запись диска на основе, так как параметры управления, сколько данных, чтобы сохранить на диске.

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

Flight Recorder был разработан для больших серверов с ГБ памяти и ТБ диска, поэтому я не думаю, что JVM сможет уважать номер, который вы предоставили, то есть одно событие может более 100 кб, но обычно они составляют около 50-150 байт.

Во-вторых, название параметров (MAXSIZE и MaxAge) вводят в заблуждение. Это не максимальный размер/возраст, а порог, при котором JVM удаляет файл журнала при их повороте, что обычно происходит каждые 12 МБ. Чтобы свести к минимуму накладные расходы, JVM не останавливает все потоки сразу после достижения порогового значения, что означает, что данные разливаются, поэтому на самом деле это 12-15 МБ. Если система сильно насыщена, это может быть намного больше, думаю, 30-40 МБ.

Так установка MAXSIZE до 100k не будет работать, вы всегда будете получать по крайней мере 12 Мб,

Если вы установите MaxAge на 1 минуту вы получите данные для по крайней мере одну минуту , возможно, больше, если он может вместиться в размер около одного файла журнала, 12-15 Мб.

Если у вас есть запись в памяти, данные копируются из буферов памяти на диск при завершении записи. Вот почему ваш файл пуст. Если вы хотите, чтобы Flight Recorder непрерывно записывался на диск, вы должны установить disk = true.

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