SolrCloud 集群 ConcurrentLRUCache Full Gc 问题查找 即 JVM老年代无法回收
2018-01-02 16:56
381 查看
1.问题描述
jstat -gcutil 25477 1000
Solr JVM ,一直FUll GC,老年代对象一直存活,无法回收,初步分析: 使用 eclipse 插件 Memory Analysis Tools ( MAT )分析老年代 内存占用情况
2. 进行步骤
A.导出 内存快照
jmap -dump:format=b,file=/tmp/heap.hprof 25477
B.把 /tmp/heap.hprof 下载到本地,使用 MAT 进行分析
3.结果分析
从图中可以看出,org.apache.solr.util.ConcurrentLRUCache 对象竟然使用 10.8G的堆内存空间。
两个 ConcurrentLRUCache 对象 object 占用 20G的内存,堆内存 一共30G,这是内存无法接受。
4.问题解决及理论
A. Lucene 有两种缓存 FieldCache 和 Filter Cache ,Solr 在lucene 又增加 queryResult、DocumentCache 和 perSegFilter (自定义缓存) ,一份 solr JVM索引 对应的缓存 value ,都存放在 ConcurrentLRUCache 的 private final ConcurrentHashMap<Object, CacheEntry<K,V>> map 里。
解决方案:
修改响应的size 的大小,观察几天JVM 内存使用情况
问题延伸:
1.此问题是由于缓存无法回收引起的,用过改天缓存大小解决
2.解决办法二: 增加弱引用的使用,使用 WeakHashMap 来存放缓存对象,及时清理缓存对象。
3. solr 内存会在索引预热阶段,清理缓存,当我们基于 lucene 做二次开发建立集群的时候,可以在预热阶段,自行清理WeakHashMap 缓存对象。
jstat -gcutil 25477 1000
Solr JVM ,一直FUll GC,老年代对象一直存活,无法回收,初步分析: 使用 eclipse 插件 Memory Analysis Tools ( MAT )分析老年代 内存占用情况
2. 进行步骤
A.导出 内存快照
jmap -dump:format=b,file=/tmp/heap.hprof 25477
B.把 /tmp/heap.hprof 下载到本地,使用 MAT 进行分析
3.结果分析
从图中可以看出,org.apache.solr.util.ConcurrentLRUCache 对象竟然使用 10.8G的堆内存空间。
两个 ConcurrentLRUCache 对象 object 占用 20G的内存,堆内存 一共30G,这是内存无法接受。
4.问题解决及理论
A. Lucene 有两种缓存 FieldCache 和 Filter Cache ,Solr 在lucene 又增加 queryResult、DocumentCache 和 perSegFilter (自定义缓存) ,一份 solr JVM索引 对应的缓存 value ,都存放在 ConcurrentLRUCache 的 private final ConcurrentHashMap<Object, CacheEntry<K,V>> map 里。
解决方案:
修改响应的size 的大小,观察几天JVM 内存使用情况
问题延伸:
1.此问题是由于缓存无法回收引起的,用过改天缓存大小解决
2.解决办法二: 增加弱引用的使用,使用 WeakHashMap 来存放缓存对象,及时清理缓存对象。
3. solr 内存会在索引预热阶段,清理缓存,当我们基于 lucene 做二次开发建立集群的时候,可以在预热阶段,自行清理WeakHashMap 缓存对象。
相关文章推荐
- 一次线上JVM FullGC 问题的查找
- JVM 垃圾回收 Minor gc vs Major gc vs Full gc
- JS垃圾回收——和其他语言一样,JavaScript 的 GC 策略也无法避免一个问题:GC 时,停止响应其他操作,这是为了安全考虑
- JVM 垃圾回收 Minor gc vs Major gc vs Full gc
- Minor GC、Major GC和Full GC之间的区别及JVM内存分布,JVM垃圾回收初解-JVM
- Full GC为什么那么慢?为什么老年代垃圾回收效率比新生代低很多?为什么Minor gc速度比Major GC慢?
- JVM FULL GC太频繁,CPU占用率过高问题
- 一次JVM中FullGC问题排查过程
- JVM 垃圾回收 Minor gc vs Major gc vs Full gc
- JVM 垃圾回收,理解GC日志
- jvm垃圾回收的时间问题
- JVM(一)——GC,内存分配和垃圾回收
- HP unix集群一个节点无法服务遇到的诡异问题
- JVM GC日志时间问题
- windows 2012(64位) IIS配置asp程序 500 - 内部服务器错误。您查找的资源存在问题,因而无法显示。
- 怎么在面试时回答Java垃圾回收机制(GC)相关问题?
- elasticsearch中节点都启动但是无法形成集群问题
- 500 – 内部服务器错误。 您查找的资源存在问题,因而无法显示。
- JVM原理(三):垃圾回收机制(GC)
- 关于实行rcp项目开机自启动无法找到jvm.cfg的问题