Memory leaks Solr使用了太多内存
我们有一个Solr3.4实例在Windows2008R2上运行,带有OracleJava6HotSpotJDK,该实例没有响应。当我们查看机器时,我们注意到可用的物理内存变为零 Tomcat7.exe进程正在使用~70Gigs(专用工作集),但工作集(内存)正在使用系统上的所有内存。Tomcat/Solr日志中没有错误。我们使用VMMap来标识内存正用于映射Solr segment文件 重新启动Tomcat暂时解决了这个问题,但最终还是恢复了 然后,我们尝试减小JVM的大小,为内存映射文件提供更多的空间,但是Solr最终会对旧一代的100%无响应。再次重置修复了该问题,但在我们重置之前,它没有抛出内存不足异常Memory leaks Solr使用了太多内存,memory-leaks,solr,jvm,mmap,Memory Leaks,Solr,Jvm,Mmap,我们有一个Solr3.4实例在Windows2008R2上运行,带有OracleJava6HotSpotJDK,该实例没有响应。当我们查看机器时,我们注意到可用的物理内存变为零 Tomcat7.exe进程正在使用~70Gigs(专用工作集),但工作集(内存)正在使用系统上的所有内存。Tomcat/Solr日志中没有错误。我们使用VMMap来标识内存正用于映射Solr segment文件 重新启动Tomcat暂时解决了这个问题,但最终还是恢复了 然后,我们尝试减小JVM的大小,为内存映射文件提供更
目前,我们的蜘蛛侠意识告诉我们,当内存紧张时,缓存不会收缩,可能有太多的MappedBytebuffer挂在周围,因此操作系统无法从内存映射文件中释放内存。这可能是由于SOLR对目录使用的新默认策略(它试图将它们映射到RAM或类似的东西) 阅读以下内容:
参数太多,信息太少,无法提供任何详细信息。这个答案与所提到的系统一样,也是非常古老的 以下是一些有助于我的经验:
- 相反,要减少Tomcat和SOLR中的RAM使用,以降低交换的风险。留出系统空间
- 如果这个“开始”在没有对Tomcat或SOLR配置进行任何更改的情况下出现-这可能是因为SOLR必须索引和查询的数据量增加了。这可能意味着原始配置一开始就不好,或者已经达到了当前资源的限制,必须进行检查。这是哪一个
- 检查查询(如果您可以影响它们):将经常请求的任何子查询结构移动到filterqueries中,将非常单独的请求结构移动到常规查询参数中。减少查询缓存,增加/保留筛选器查询缓存-或者减少筛选器缓存,以防系统中不经常使用筛选器查询
- 检查SOLR的schema.xml中的配置错误(实际上可能只是误解)。我曾经遇到过这样的情况:导入字段会大量创建,导致RAM溢出
- 如果在导入过程中发生:请检查导入过程是否设置为“自动提交”并经常提交,以及是否进行了优化-也许可以减少提交次数,并在最后只优化一次
- 升级Java、Tomcat和SOLR