Safepoint+ журнал статистики с операцией Нет vmop на выходе JDK12

Я запускаю приложение на 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 ответ

Решение

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

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

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

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

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

Другие вопросы по тегам