Утечка памяти с увеличением T4CPreparedStatement - PullRequest
0 голосов
/ 02 ноября 2018

У нас есть приложение, которое использует hibernate 4.2.22 (JBoss 6.4.7). В нашем коде мы не используем PreparedStatements, каждый дб-вопрос обрабатывается hibernate.

Но во время теста производительности мы получаем oom. Причиной этого, по-видимому, является очень большое количество экземпляров oracle.jdbc.driver.T4CPreparedStatement, которые, как мы полагаем, созданы из спящего режима. Даже если мы выполняем GC из VisualVM, они все еще присутствуют и увеличиваются при запуске нашего теста.

Как вы думаете, ребята, есть ли способ решить это?

С наилучшими пожеланиями Фредрик

1 Ответ

0 голосов
/ 07 ноября 2018

Я думаю, что мы решили это. Мы настроили наш источник данных в JBoss следующим образом:

 <pool>
  <min-pool-size>200</min-pool-size>
  <max-pool-size>400</max-pool-size>
 </pool>
..
<statement>
  <prepared-statement-cache-size>100</prepared-statement-cache-size>
  <share-prepared-statements>true</share-prepared-statements>
 </statement>

Теперь мы изменили его на

<statement>
 <prepared-statement-cache-size>5</prepared-statement-cache-size>
 <share-prepared-statements>true</share-prepared-statements>
</statement>

И теперь GC, кажется, работает хорошо. Я думаю, что пул для подготовленных заявлений был слишком большим. Я думаю, что у нас было 400 * 100, теперь у нас есть 400 * 5.

Все комментарии приветствуются. С наилучшими пожеланиями Фредрик

...