Как исправить сжатое пространство классов?
Мы используем open jdk 8 с весенней загрузкой версии 2.2.4.RELEASE и встроенным tomcat версии 9.0.16 в нашем веб-приложении, и с последних 3 месяцев мы часто сталкиваемся с проблемой сжатого пространства классов. Каждый раз, когда происходит OOM, мы должны перезапускать приложение. Журнал из catalina.log находится ниже.
ERROR org.jgroups.logging.Log4J2LogImpl.error:Line 95 - failed executing task FD_ALL: TimeoutChecker (interval=2000 ms)
java.lang.OutOfMemoryError: Compressed class space
788][2020-07-21 10:29:12,475]- org.apache.juli.logging.DirectJDKLog.log:Line 175 - Failed to complete processing of a request
java.lang.OutOfMemoryError: Compressed class space
Мы также выделили 2 ГБ для CompressedClassSpaceSize, используя XX:CompressedClassSpaceSize=2g
согласно некоторому ответу в OutOfMemoryError: сжатое пространство классов
0 ответов
Вы можете решить эту проблему, используя один из двух вариантов ниже.
1. Вы можете увеличить лимит пространства классов, используя флаг -XX:CompressedClassSpaceSize=n VM. Максимальный лимит составляет 4 ГБ.
(ИЛИ ЖЕ)
2. Вы можете полностью отключить функцию указателя сжатого класса, используя флаг VM -XX:-UseCompressedClassPointers.
Примечание: имейте в виду, что отключение этой функции увеличит использование пространства кучи вашим приложением.
Чтобы узнать больше об этой ошибке OutOfMemoryError и указателе класса (поле klass), вы можете прочитать эти книги. Это даст вам лучшее представление о том, что вы действительно можете делать со сжатым указателем класса и пространством.