Tomcat Solr cloud在为常规搜索请求提供索引时崩溃

Tomcat Solr cloud在为常规搜索请求提供索引时崩溃,tomcat,solrj,solrcloud,jvm-crash,lucene-nrt,Tomcat,Solrj,Solrcloud,Jvm Crash,Lucene Nrt,我在tomcat7上安装了一个4.6Solr云,设置了4个碎片(每个碎片有两个副本),ZooKeeper集成了3台服务器 每个solr服务器都有8个内核和30Gb的ram,我为solr/tomcat分配了15Gb,其余由操作系统处理 我们有一个约2500万文档的单一集合,索引大小约为15Gb。 虽然solr每分钟可以处理许多请求,但在大量索引之后,我得到了一个 线程“http-bio-8080-Acceptor-0”中出现异常 java.lang.OutOfMemoryError:无法创建新的本

我在tomcat7上安装了一个4.6Solr云,设置了4个碎片(每个碎片有两个副本),ZooKeeper集成了3台服务器

每个solr服务器都有8个内核和30Gb的ram,我为solr/tomcat分配了15Gb,其余由操作系统处理

我们有一个约2500万文档的单一集合,索引大小约为15Gb。 虽然solr每分钟可以处理许多请求,但在大量索引之后,我得到了一个

线程“http-bio-8080-Acceptor-0”中出现异常 java.lang.OutOfMemoryError:无法创建新的本机线程

被雄猫扔了

索引是使用SolrJ的
CloudSolrServer
完成的,有几个索引线程(共享
CloudSolrServer
实例),一次执行5000个文档的批量索引。 该过程包括添加和删除文档。 在整个索引结束时,我们只执行一次提交

这个异常从一台服务器开始,但很快所有其他服务器都会出现,云无法提供任何请求(在日志中,我可以看到他们试图互相查询,但没有成功)

注意,tomcat没有挂起,只有solr进程。 为了恢复solr云,我必须重新启动所有8台服务器(killall…service start…)

以下是我使用的一些配置:

solrconfig.xml:

<autoCommit>
   <maxDocs>50000</maxDocs>
   <maxTime>${solr.autoCommit.maxTime:100000}</maxTime>
   <openSearcher>false</openSearcher> 
</autoCommit>
   <autoSoftCommit> 
   <maxTime>${solr.autoSoftCommit.maxTime:10000}</maxTime> -->
</autoSoftCommit>

<useColdSearcher>true</useColdSearcher>
<maxWarmingSearchers>4</maxWarmingSearchers>
我没有看到GC对CPU的任何重大使用,大部分都是由ParNew完成的,所以这里没有“停止世界”的问题

  • 索引过程中的文档是否会阻塞本机内存
  • 有什么具体的东西我应该寻找,以了解错误的原因?(#打开的连接/文件、tomcat参数等)
  • 在此处输入图像描述我是否可以提前识别此类情况,或者添加更多服务器(假设这将解决问题)

  • 尝试将-Xmx15380m设置为2-4 gb,即-Xmx2048m

    请提供以下检查表的结果:
    ulimit-a
    free-m
    ps uH p | wc-l
    JAVA_OPTS="$JAVA_OPTS -Xmx15380m -Xms15380m -DzkHost=... -XX:NewRatio=1 -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=80 -XX:MaxTenuringThreshold=15 -XX:+UseConcMarkSweepGC -XX:+CMSScavengeBeforeRemark -XX:PretenureSizeThreshold=64m -XX:CMSFullGCsBeforeCompaction=1 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:CMSTriggerPermRatio=80 -XX:CMSMaxAbortablePrecleanTime=6000 -XX:+CMSParallelRemarkEnabled -XX:+ParallelRefProcEnabled -XX:+AggressiveOpts -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=512M -XX:PermSize=128M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat7/heapDump.hprof"