1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yangdechao_admin-guage-notes

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
16生产问题排查总结.md 7.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 24.06.2025 02:12 0782333

Проблема 1 (Проверка причин FullGC)

Описание проблемы

Занимаемость памяти часто превышает 80%, приложение отправляет в среднем 5-6 FullGC за час.

Процесс проверки

  1. Настройка вывода информации о сборке мусора, добавление параметров JVM для записи логов сборки мусора, обратите внимание, что путь к логам должен быть создан заранее.
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:./gc.log
  1. Поиск ключевых слов gc() в коде, обнаружено, что в коде есть функция массового экспорта данных, которая вызывается каждый раз в цикле for. После тестирования функциональности было установлено, что каждый раз, когда код доходит до этой точки, появляется предупреждение; также была проведена проверка состояния кучи JVM во время каждого FullGC.

  2. Через некоторое время после запуска системы произошло внезапное увеличение времени отклика на запросы, при этом через мониторинг системы было установлено, что OldGen почти заполнился, что привело к активации FullGC. Однако определение того, что именно вызвало сборку мусора, потребовало значительных усилий.

  3. Через jconsole было обнаружено, что существует поток pol, который выполняет операции с Excel и постоянно занимает большое количество памяти.5. Из диаграммы видно, что этот Excel содержит 100 000 пустых строк, хотя они могут быть удалены через фильтрацию, но создание этих 100 000 объектов Row не может быть немедленно освобождено сборщиком мусора. Когда программа завершает выполнение, большие объекты могут вызвать FullGC, что приводит к паузам Stop The World, и как следствие, все остальные службы JVM начинают выдавать ошибки времени ожидания.### Причины активации

При импорте Excel некоторые пользователи не следуют шаблону, что приводит к созданию большого количества объектов Row, что вызывает недостаток памяти в старом поколении и активацию FullGC.

Условия активации FullGC

Условия активации сборки мусора PS: Цель оптимизации JVM — уменьшение времени выполнения SWT (пауза Stop The World) и предотвращение частых FullGC. 1) Вызов метода System.gc() Этот метод предлагает JVM выполнить полную сборку мусора, хотя это рекомендация, а не обязательство, но часто он приводит к активации FullGC, что увеличивает частоту FullGC и, следовательно, увеличивает количество временных пауз. Сильно рекомендуется избегать использования этого метода, позволяя JVM самой управлять своей памятью, **что можно сделать с помощью параметра -XX:+DisableExplicitGC для запрета вызова System.gc через RMI (Java Remote Method Invocation).**2) Недостаток памяти в старом поколении

Пространство старшего поколения становится недостаточным только в случае, когда объекты младшего поколения переходят в старшее или создаются большие объекты и массивы. Если после выполнения полной сборки мусора (Full GC) пространство остается недостаточным, то выбрасывается ошибка: java.lang.OutOfMemoryError: Java heap space. Для предотвращения вышеописанных ситуаций, при настройке системы следует стремиться к тому, чтобы объекты были собраны на этапе младшей сборки мусора (Minor GC), чтобы объекты жили в младшем поколении дольше, а также чтобы не создавались слишком большие объекты и массивы.

3) Пространство Permanent Generation (постоянное пространство) заполнилось

Если постоянное пространство заполнилось, то это указывает на то, что количество метаданных и классов достигло предела доступной памяти. В этом случае может возникнуть ошибка java.lang.OutOfMemoryError: Metaspace. Для решения этой проблемы можно увеличить размер постоянного пространства или оптимизировать использование метаданных и классов.Permanent Generation хранит информацию о классах, таких как метаданные классов. Когда в системе много классов для загрузки, отражения классов и вызова методов, Permanent Generation может заполниться. В случае, если сборка мусора Full GC не решает проблему, JVM выбрасывает ошибку java.lang.OutOfMemoryError: PermGen space. Чтобы избежать заполнения Permanent Generation и выполнения Full GC, можно увеличить размер Permanent Generation или использовать CMS GC.

4) Средний размер объектов, перемещаемых из Young Generation в Old Generation, превышает доступную память в Old Generation

5) Размер объектов, копируемых из From Space в To Space, превышает доступную память в To Space

При копировании объектов из Eden и From Space в To Space, если размер объекта превышает доступную память в To Space, объект перемещается в Old Generation. Если доступная память в Old Generation меньше размера этого объекта, возникает ошибка.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/yangdechao_admin-guage-notes.git
git@api.gitlife.ru:oschina-mirror/yangdechao_admin-guage-notes.git
oschina-mirror
yangdechao_admin-guage-notes
yangdechao_admin-guage-notes
master