Низкая производительность или высокие накладные расходы из-за вызовов System.gc()

Проблема

Накладные расходы на сборку мусора могут быть довольно высокими, или на производительность может повлиять частая сборка мусора из-за пользовательских запросов от вызовов System.gc().

Симптом

Высокие накладные расходы на сборку мусора в случаях, когда куча не страдает сбоями выделения.

Причина

Код приложения вызывает System.gc();

Диагностика проблемы

Проблема будет проявляться в виде больших накладных расходов на сборку мусора и может быть диагностирована путем просмотра сборок мусора, которые не вызваны сбоями выделения памяти. Некоторые инструменты анализа сборки мусора будут выдавать определенные предупреждения.

Решение проблемы

Чтобы снизить нагрузку на производительность, введите следующий общий аргумент JVM:

-Xdisableexplicitgc

Подробные сведения об общих аргументах JVM см. в этой технической заметке
«Настройка общих аргументов JVM в WebSphere Application Server» http://www.ibm.com/support/docview .wss?rs=180&uid=swg21417365 Чтобы идентифицировать вызовы из кода приложения, которые выдают явные запросы на сборку мусора, введите следующий параметр -Xtrace в качестве общего аргумента JVM: -Xtrace:print=mt,methods={java/lang /System.gc}, триггер = метод {java/lang/System.gc, jstacktrace}

Xtrace будет регистрировать вызовы методов в файле native_stderr.log. Трассировка покажет вызовы даже с включенным параметром -Xdisableexplicitgc. Трассировку стека следует использовать для поиска источника явных запросов на сборку мусора в коде приложения.

После обновления кода приложения для удаления явных запросов на сборку мусора удалите упомянутые выше универсальные аргументы JVM

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *