Использование памяти при подключении к PostgreSQL увеличивается - PullRequest
0 голосов
/ 13 июля 2011

У меня есть веб-сканер, который использует пул соединений для подключения к базе данных и вставки страниц.

Я видел, что использование памяти увеличивается во время выполнения программы. Я предполагаю, что я забыл закрыть какое-либо PreparedStatement или другой объект соединения.

Я вызываю метод connection.close, но он возвращает только соединение с базой данных.

Есть ли способ узнать, есть ли в соединении открытые объекты?

1 Ответ

1 голос
/ 13 июля 2011

Похоже, что у вашего приложения есть утечка памяти.Чтобы начать отладку, вы можете использовать jmap, утилиту, поставляемую с JDK (обычно находится в каталоге bin рядом с java, javac, javadoc и т. Д.).Эта команда создаст карту памяти всех объектов, находящихся в вашей JVM.Вы можете запустить его с течением времени, когда ваше приложение работает, и сравнить количество объектов, чтобы увидеть, существует ли какой-либо тип объекта, который, по-видимому, имеет непрерывно увеличивающееся общее количество, но не сокращается (в результате сборок мусора).

jmap -heap -histo <PROCESS_ID_OF_YOUR JVM>

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

Все «закрываемые» объекты должны быть закрыты в блоках finally, чтобы избежать выходаоткрытые соединения, операторы и т. д., задерживающиеся в JVM, если перед закрытием выдается исключение.

примечание: в окнах эти исполняемые файлы имеют суффикс .exe.

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