Почему в трассировках стека задержек нет среднего значения?

Когда я открываю файл.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).

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