[问题记录] Java内存泄漏

本文记录了一次Java内存泄漏的问题,表现为Java进程内存使用率高、JVM堆内存尤其是老年代占用高及频繁FGC。问题可能源于动态分配内存未释放、数据库/网络连接未关闭等。排查思路包括使用htop、show-busy-java-threads、jstat等工具,通过生成堆转存快照并用Eclipse MAT等工具进行分析。文中给出了具体的示例步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题现象
  1. Java程序报错 java.lang.OutOfMemoryError: Java heap space
  2. Java进程内存使用率高;
  3. JVM堆内存使用率高,尤其是老年代;
  4. FGC频繁;
问题原因
  1. 动态分配的堆内存持续递增不释放;(长生命周期对象持有短生命周期对象导致GC无法回收),例如 ThreadLocal 忘记 remove;
  2. 数据库/网络Socket/IO的连接打开后忘记关闭;
排查思路
  1. top -Hp <pid> 命令(可选用 htop 命令):查看进程的内存使用率是否持续居高不下;
  2. jstack <pid> | grep -A 10 <tid_hex> 命令(可选用 show-busy-java-threads 工具):查看线程状态,排除死锁和IO阻塞;
  3. jstat -gcutil <pid> <interval> 命令:查看进程是否频繁发生FGC;
  4. jmap -heap <pid> 命令:查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值