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