java.lang.OutOfMemoryError: Превышен лимит накладных расходов GC: приложение развернуто в weblogic - PullRequest
2 голосов
/ 30 сентября 2019

У нас есть приложение, развернутое на weblogic 12c, и мы видим периодически возникающие исключения в журналах

java.lang.OutOfMemoryError: Превышен лимит накладных расходов GC

и когда я вижу журналы приложений log4j одновременно, я вижу следующее исключение

Исключение [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd):org.eclipse.persistence.exceptions.DatabaseException Внутреннее исключение: weblogic.jdbc.extensions.PoolLimitSQLException: weblogic.common.resourcepool.ResourceLimitException: в настоящее время в пуле TMP_DS_RW отсутствуют ресурсы для выделения приложениям, увеличьте размер пула и повторите попытку. Код ошибки: 0

Причина: weblogic.jdbc.extensions.PoolLimitSQLException: weblogic.common.resourcepool.ResourceLimitException: в настоящее время нет доступных ресурсов в пуле TMP_DS_RW для выделения приложениям, увеличьте размер пула иповторить попытку ..

Это происходит из-за того, что количество соединений в пуле исчерпано?

Существует ли какая-либо связь между размером пула соединений weblogic и java.lang.OutOfMemoryError?

, поскольку всякий раз, когда соединения пула кажутся исчерпанными, мы сталкиваемся с java.lang.OutOfMemoryError.

Мы попытались увеличить размер кучи с 1 ГБ до 2 ГБ, но все же через некоторое время мы сталкиваемся с java.lang.OutOfMemoryError.

После использования анализатора дампа кучи eclipse в подозрительной проблеме он показывает

Класс «java.lang.ref.Finalizer», загруженный «системным загрузчиком классов», занимает 9 935 880 (69,45%) байтов.

Примечание: МаксимумНа вкладке «Пул соединений» конфигурации источника данных jndi в weblogic установлена ​​емкость 30, и мы используем базу данных oracle.

Ответы [ 3 ]

1 голос
/ 01 октября 2019

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

1 голос
/ 02 октября 2019

java.lang.OutOfMemoryError: Превышен предел накладных расходов GC

Эта ошибка вызывается при выполнении всех следующих условий:

  1. Количество времени, проведенного в полном объемеGC превышает значение, указанное в флаге -XX: GCTimeLimit = N. Значение по умолчанию равно 98 (т. Е. Если 98% времени затрачивается в GC).
  2. Объем памяти, возвращаемый полным GC, меньше значения, указанного в флаге -XX: GCHeapFreeLimit = N,Значение по умолчанию для этого параметра равно 2, что означает, что если во время полного GC освобождается менее 2% кучи, это условие выполняется.
  3. Вышеуказанные два условия выполнялись в течение пяти последовательных полных циклов GC (это значение не настраивается). Анализ кучи |187
  4. Значение флага -XX: + UseGCOverheadLimit равно true (по умолчанию).

Источник: производительность Java, полное руководство

Если увеличение размера кучи не устраняет это, проверьте, не является ли узкое место ЦП.

-XX:+PrintGCDetails
-Xloggc:<path>

Это позволит записать информацию о ГХ в. Если вы видите непрерывное наращивание размера кучи, значит, у вас утечка памяти и, возможно, вы не закрываете свои соединения.

0 голосов
/ 01 октября 2019

Вы пытались контролировать соединения с консоли WebLogic? Службы -> Источники данных -> (выберите ваш источник данных) -> (вкладка) Мониторинг, и вы должны иметь представление соединений в режиме реального времени.

...