Solr的OOM问题排查

现象

SOLR启动十几分钟后触发OOM脚本退出。
日志显示重启后SOLR在进行replay以前的tlog操作。

排查

solr的启动脚本如下

/usr/java/jdk1.8.0_102/bin/java -server -Xms1024m -Xmx4096m -XX:NewRatio=3 -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 -XX:+CMSScavengeBeforeRemark -XX:PretenureSizeThreshold=64m -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=50 -XX:CMSMaxAbortablePrecleanTime=6000 -XX:+CMSParallelRemarkEnabled -XX:+ParallelRefProcEnabled -verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/var/log/ambari-infra-solr/solr_gc.log -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=18886 -Dcom.sun.management.jmxremote.rmi.port=18886 -DzkClientTimeout=60000 -DzkHost=umetrip09-hdp2.6-109.travelsky.com:2181,umetrip10-hdp2.6-110.travelsky.com:2181,umetrip11-hdp2.6-111.travelsky.com:2181/infra-solr -Djetty.port=8887 -DSTOP.PORT=7887 -DSTOP.KEY=solrrocks -Duser.timezone=UTC -Djetty.home=/usr/lib/ambari-infra-solr/server -Dsolr.solr.home=/opt/ambari_infra_solr/data -Dsolr.install.dir=/usr/lib/ambari-infra-solr -Dlog4j.configuration=file:/etc/ambari-infra-solr/conf/log4j.properties -Dsolr.kerberos.name.rules= -XX:OnOutOfMemoryError=/usr/lib/ambari-infra-solr/bin/oom_solr.sh 8887 /var/log/ambari-infra-solr -jar start.jar --module=htt

在Solr发生OOM时,系统会自动调动关闭脚本kill -9掉Solr进程。
我司并没有生产场景使用solr,只是ranger使用solr来存储审计日志。所以ranger必须依赖solr来存储数据。

在solr中,有tlog的概念。
Transaction Log(Tlog): 记录了原始文档,用于索引恢复功能。在SolrCloud中,每个节点都有自己的tlog。在更新的时候,整个文档会写入tlog中。在原子更新(Atomic update)时,仍然是整个文档写进来,包括了从老文档中读取出来的内容。Tlog是保证一致性的关键,有了它,就算索引段(segment)关闭前JVM崩溃了,索引也不会丢失。
注意:一旦服务器没有正常关闭,则重新启动时,tlog会进行回放。因此,如果你的tlog很大(我们见过GB级别的tlog),则重启会非常慢,例如几个小时才启动成功。

那么问题来了,如果需要回放的tlog数据量非常大,那么会造成OOM吗?

解决

删除所有tlog后重启solr。为什么造成tlog数据量大已经无从考察。

你可能感兴趣的:(故障排查)