Чрезвычайно большое количество объектов com.mysql.jdbc.StatementImpl $ CancelTask ​​в системе, вызывающее исключения OOM - PullRequest
1 голос
/ 25 апреля 2011

Я использую jboss 4.2.3 с mysql-connector-5.1.8. Мое приложение выполняет большое количество операций чтения из БД (порядка нескольких сотен тысяч) и значения записей. В течение некоторого времени происходит сбой jboss с исключениями OOM. Когда я проверил дамп кучи, я вижу большое количество com.mysql.jdbc.StatementImpl$CancelTask объектов около 4 миллионов, занимающих сотни МБ данных Это утечка памяти? для чего именно он используется и как это отключить?

Поскольку я использую управляемую контейнером транзакцию с менеджером сущностей, внедренным в ejb, я понял, что явного закрытия не требуется. Продолжая копать, я обнаружил, что время ожидания транзакции запроса было установлено равным 30 минутам с включенным таймаутом запроса. Похоже, CancelTask объект живет, пока не истечет таймер. Как только я сокращаю время ожидания транзакции, эти объекты очищаются по истечении таймера

Ответы [ 3 ]

2 голосов
/ 16 ноября 2012

У меня была похожая проблема на tomcat с использованием пула соединений с БД с драйвером MySql : в куче было множество объектов JDBCResultSet и StatementImpl, которые не были удалены,После долгих поисков я обнаружил, что установка параметра maxAge источника источника данных в файле tomcat context.xml помогла.

0 голосов
/ 25 апреля 2011

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

0 голосов
/ 25 апреля 2011

Очень сложно ответить на ваш вопрос, не увидев некоторого кода ... все же ...

Я понимаю, что вы не закрываете свои ресурсы JDBC должным образом (соединение / операторы / Resultsets).Насколько мне известно, эти объекты CancelTask ​​создаются при тайм-ауте запросов.

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