命令
命令 | 作用 |
---|---|
jmap -dump:live,format=b,file=java.hprof {pid} | dump内存 |
jhat -refs true dump.hprof | 分析 |
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof | oomdump |
jstat -gc {pid} | 内存和gc |
jmap -histo:live {pid} | 摘要 |
jProfile
使用jProfile对大对象进行分析, 查看其引用链路
static class Cache {
private final ClientFinalizer clientFinalizer = new ClientFinalizer();
// 就是这个map
private final Map<Key, FileSystem> map = new HashMap<Key, FileSystem>();
private final Set<Key> toAutoClose = new HashSet<Key>();
}
最大的对象是FileSystem
的缓存, 分析代码可知使用完FileSystem
后没有调用close
, 导致没有被回收.
第二个大对象定位为org.apache.logging.log4j.core.layout.StringBuilderEncoder#threadLocal
, 该项目中由于需要根据业务id路由日志文件, 查看log4j RoutingAppender文档发现其需要配置清理回收策略IdlePurgePolicy
.
<IdlePurgePolicy timeToLive="15" timeUnit="minutes"/>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。