Safepoint + журнал статистики с операцией Нет vmop на выходе JDK12 - PullRequest
0 голосов
/ 26 марта 2019

Я запускаю приложение на JDK12 с параметром -Xlog: safepoint + stats = debug: file = safepoint.log vm, чтобы регистрировать действия безопасной точки и работать с ZGC. У меня есть проблема, чтобы понять вывод журнала:

[1408.417s][debug][safepoint,stats]           vmop                            [ threads:    total initially_running wait_to_block ][ time:    spin   block    sync cleanup    vmop ] page_trap_count
[1412.164s][debug][safepoint,stats] 1412.162: ZOperation                    [               376                 0             7 ][             0       0       0       0       1 ]               7
[1413.164s][debug][safepoint,stats] 1413.164: None                          [               376                 0             0 ][             0       0       0       0       0 ]               0
[1414.165s][debug][safepoint,stats] 1414.164: None                          [               376                 0             1 ][             0       0       0       0       0 ]               1

Я понимаю первую строку, которая сообщает, что ZOperation занял 1 миллис, и 7 потоков внесли вклад в блокировку.

Я не понимаю вторую строку, что такое "Нет" операция vmop? Похоже, продолжительность этой операции равна 0. Это действительно 0 или 0, потому что это заняло менее 1 миллисекунды? Если да, можно установить более высокую степень детализации регистрации времени, чтобы узнать, сколько наносекунд потребовалось? или микросекунды?

У меня есть много операций "Нет", записанных в секунду. Я хотел бы знать, что делает JVM во время этой паузы. Я отслеживаю время ZGC и время SafePoint каждые 10 секунд, а суммарное время безопасной точки в 5 раз превышает суммарное время паузы gc. Я хотел бы как-то уменьшить это безопасное время для моего приложения.

1 Ответ

3 голосов
/ 28 марта 2019

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

Если есть задачи очистки, обязательная безопасная точка происходит каждые GuaranteedSafepointInterval миллисекунды. Значение по умолчанию - 1000. Обратите внимание, что в вашем случае безопасная точка не срабатывает ровно через 1 секунду после предыдущей безопасной точки.

Интервал можно настроить с помощью

-XX:+UnlockDiagnosticVMOptions -XX:GuaranteedSafepointInterval=<ms>

Чтобы избежать путаницы, в JDK 13 такие безопасные контрольные точки получили Cleanup имя операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...