Почему в трассировках стека задержек нет среднего значения?
Когда я открываю файл.jfr (Java Flight Record) с помощью Java Mission Control, я могу найти 'Stack Trace', 'Longest' и 'Count' на вкладке Thread -> Latencies -> Latency Stack Traces. Я забочусь о среднем, но не самый длинный. На вкладке Java Latencies есть среднее значение, но оно содержит все задержки, связанные с типом события. Некоторые из них для меня бессмысленны, например:
sun.misc.Unsafe.park(boolean, long)
295,569,155,245 436,427
java.util.concurrent.locks.LockSupport.park(Object)
295,569,155,245 344,030
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await()
295,569,155,245 263,418
java.util.concurrent.LinkedBlockingQueue.take()
63,773,776,315 257,531
java.util.concurrent.ThreadPoolExecutor.getTask()
63,773,776,315 257,511
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker)
63,773,776,315 257,511
java.util.concurrent.ThreadPoolExecutor$Worker.run()
63,773,776,315 257,511
java.lang.Thread.run()
63,773,776,315 257,511
Выше указано время простоя пула потоков, оно ждет следующей задачи. Среднее значение этого и всех остальных стековых трасс не имеет смысла. Я забочусь только о задержках следов бизнес-стека. Как я могу получить среднее значение конкретной трассировки стека задержки. Могу ли я экспортировать исходные данные в CSV, тогда я могу рассчитать самостоятельно.
1 ответ
Чтобы сохранить низкую нагрузку, Flight Recorder регистрирует только выбросы. Например. если длительность задержки ниже 20 мс, она не записывается.
Можно было бы сделать выборку задержек, получить приблизительную среднюю задержку, но на сегодняшний день она недоступна (JDK 11).