В нашем CI есть работа, которая запускает наше Java-приложение и запускает некоторый тест (тест действует как клиент для приложения).Приложение запускается с тем, что я считаю правильным вариантом JVM для непрерывной записи полета:
-XX:+UnlockCommercialFeatures -XX:+UnlockDiagnosticVMOptions -XX:+FlightRecorder -XX:FlightRecorderOptions=dumponexit=true,dumponexitpath=/tmp/application-flightRecorder.jfr -XX:StartFlightRecording=defaultrecording=true,settings=customSetting -XX:+DebugNonSafepoints
Он прекрасно создает файл JFR, и я могу открыть его в Java Mission Control.В дополнение к описанному выше варианту JVM у нас также есть возможность включить ведение журнала GC: * 1004 *
-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintFlagsFinal -XX:+PrintHeapAtGC -XX:+PrintReferenceGC -XX:+PrintTenuringDistribution -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 -XX:+LogVMOutput -XX:LogFile=/tmp/application-safepoint.log -Xloggc:/tmp/application-gc.log
Что тоже хорошо.Создаются файлы журнала gc и безопасная точка.Тем не менее, я заметил, что в статистике GC в управлении полетом не перечислены все GC, которые произошли за время существования приложения.Например, если я открою журнал gc с помощью GCViewer (https://github.com/chewiebug/GCViewer),, там происходит значительно больше GC.
Я что-то здесь упустил? Или управление полетами выводит только "значительный" gc?
Заранее спасибо!