У моего приложения SpringBoot есть проблема с java.lang.OutOfMemoryError: GC overhead limit exceeded
.
Я вижу журнал, как показано ниже:
Handler dispatch failed; nested exception is
java.lang.OutOfMemoryError: GC overhead limit exceeded.
Это распространенная ошибка.
Это означает, что JVM вашего приложения тратит слишком много времени на выполнение уборщик мусора. Обычно это происходит потому, что у вас почти не хватает места, а G C приходится работать все чаще и чаще, чтобы продолжать работу.
Кроме того, процессор очень высокий, когда я работаю в приложении (99%).
Этого следовало ожидать; см. выше.
Я думаю, что это связано с xmx.
Да, это связано с этим.
Одна из возможностей состоит в том, что задача ваша webapp требует, требует больше памяти, чем позволяет параметр -xmx
. Увеличение -xmx
решит проблему ... пока вы не перейдете к более крупной задаче. На этом этапе вам нужно посмотреть, сможете ли вы оптимизировать использование памяти или купить машину с большим объемом памяти. (Сколько у вас денег в банке?)
Другая возможность - утечка памяти в вашем веб-приложении. Если это проблема, то увеличение -xmx
не решит проблему. Ваше веб-приложение может снова столкнуться с OOME ... хотя это может занять больше времени.
Я предлагаю вам найти и прочитать хорошую статью по устранению утечек памяти. Предположим, что это утечка ... пока вы не найдете явных доказательств того, что это не так.
Так как я могу проверить размер xmx, установленный для этого приложения?
Это зависит от того, как вы запускаете приложение Springboot. Например, в этой статье объясняется, как сделать это с помощью встроенного Tomcat.