java - PostgreSQL 连接的内存使用量在执行中不断增加

标签 java postgresql memory

我有一个网络爬虫,它使用连接池连接到数据库并插入页面。

我发现程序执行时内存使用量不断增加。我想我忘记关闭某些PreparedStatement 或连接的另一个对象。

我调用了connection.close方法,但它只返回到数据库的连接。

有办法查看连接中是否有打开的对象吗?

最佳答案

您似乎表明您的应用程序存在内存泄漏。要开始调试,您可以使用 jmap,这是 JDK 附带的实用程序(通常位于 java、javac、javadoc 等旁边的 bin 目录中)。该命令将生成 JVM 中所有对象的内存映射。您可以在应用程序运行时随时间运行它,并比较对象计数,以查看是否有任何类型的对象似乎总计数不断增加,但没有减少(由于垃圾收集)。

jmap -heap -histo <PROCESS_ID_OF_YOUR JVM>

如果您确实没有正确关闭语句对象,您很快就会看到它们冒泡到堆栈顶部。

所有“可关闭”对象都应该在finally block 中关闭,以避免在关闭之前抛出异常,从而避免打开的连接、语句等在JVM中徘徊。

注意:在 Windows 上,这些可执行文件具有 .exe 后缀。

关于java - PostgreSQL 连接的内存使用量在执行中不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6673693/

相关文章:

postgresql - 为选择中的每一行调用一个函数 - Postgres

SQL从另一个表的字段更新一个表的字段

c - 如何在 mac OSX 中查找内存使用情况?

python - 字节到人类可读,然后返回。无数据丢失

java - 使用泛型方法替代重载?

java - 将数据从对话框传递到 Android Activity

java - 错误: Found item Drawable/string more than one time

java - 如何将 .jar 文件添加到 Apache NetBeans 12.0 中的 java 库

sql - 查找 PostgreSQL 数据库中表、过程、函数使用的特定列的所有出现情况

python - 对 Python 的内存模型/执行环境的单一、简洁的描述?