内存泄漏(Memory Leak)本质上是指程序中已分配的内存不再被使用,却无法被释放或回收,长期运行会导致内存占用持续增长,最终引发 OOM(Out Of Memory)。
“调优解决”通常分两层含义:
下面按「定位 → 调优 → 修复」的思路系统说明。
不要一看到内存高就认为是泄漏。
常见判断方式:
工具:
jstat -gc、jmap、jconsole、VisualVM、MATtop、pmap、free -m-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:gc.log
看:
jmap -dump:live,format=b,file=heap.hprof <pid>
用 MAT 分析:
常见问题:
dashboard
heapdump
ognl @xxxService@cache
valgrind --leak-check=full ./app
import _ "net/http/pprof"
go tool pprof http://localhost:6060/debug/pprof/heap
import tracemalloc
tracemalloc.start()
-Xmx2g -Xms2g
或容器:
resources:
limits:
memory: 2Gi
-XX:+UseG1GC| 场景 | 修复方式 |
|---|---|
| 静态 Map 缓存 | 加过期策略 / 限大小 |
| ThreadLocal | 使用完 remove() |
| 监听未注销 | 显式 removeListener |
| 长连接未关闭 | try-with-resources |
| 第三方库泄漏 | 升级版本 / 替换 |
内存泄漏不能靠“调大内存”解决,只能靠“调小对象生命周期 + 工具定位 + 代码修复”。
如果你愿意,可以告诉我:
我可以直接帮你做针对性调优方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。