Spring Boot - утечка памяти - база данных H2 - не отменяет регистрацию драйвера - PullRequest
1 голос
/ 16 апреля 2020

Полностью переработан из-за новой информации:

  • Первоначальная проблема: JBoss покончила с собой с помощью «OutOfMemoryError: Metaspace» при многократном повторном развертывании простого приложения Spring Boot (2.2.6)
  • Используя дамп кучи, я обнаружил, что драйвер H2 (1.4.200) сохранил ссылку и привел к проблеме enter image description here
  • Впоследствии я проверил, почему tomcat не делает ведите себя так, находя

    The web application [killerApp] registered the JDBC driver [org.h2.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

Так что он просто работает в коте, потому что он достаточно умен, чтобы замечать утечку памяти и предотвращать ее. JBoss не делает этого и сталкивается с проблемами ...

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

Я также нашел это: GitHub - Spring Boot - обсуждение отмены регистрации управляемых драйверов JDB C

Теперь я не уверен, кто виноват?

  1. Я, потому что мне нужно было бы позаботиться о правильной отмене регистрации драйвера H2
  2. Я, потому что я неправильно настроил Spring Boot App
  3. Драйвер H2 для удержания внутреннего состояние?
  4. Пружинная загрузка для передачи на Tomcat, чтобы привести в порядок

Лучшее и большое спасибо

1 Ответ

0 голосов
/ 26 апреля 2020

В другие выходные с MAT & OOM я теперь исправил утечки памяти.

Сначала я теперь вручную отменил регистрацию драйвера JDB C, инициированного из Spring Boot в ContextListener (не знаю, зачем мне это нужно ... и Spring Boot не делает это автоматически, но да). Это решает первую утечку памяти.

Другая происходит из io.github.classgraph. Объект уничтожения добавляется как ловушка завершения работы приложения, которая выполняется только при выключении JVM. -> не очень хорошая идея для постоянно работающего сервера приложений. Они исправили это, но springdo c -openapi-ui / org.webjars: webjars-locator-core все еще использует старую версию с ошибкой. Поэтому я вручную увеличил версию classgraph. Это решает вторую утечку памяти ... блин, я никогда не хотел так много знать об этом (в противном случае я запрограммировал бы в C: D)

Проблема решена:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...