一、背景
前段時(shí)間供屉,一連參與了兩次客戶的Solr問題解決,非常具有參考價(jià)值溺蕉,特別是第二次伶丐,網(wǎng)上用Solr的人越來越少,寫下總結(jié)焙贷,希望給使用Solr也遇到類似的問題的朋友一點(diǎn)提示吧撵割。
二贿堰、MMapDirectory報(bào)錯(cuò)
2.1 報(bào)錯(cuò)現(xiàn)象
報(bào)錯(cuò)的信息還是比較直接提示Map映射失敗辙芍,并給出了"sysctl vm.max_map_count”等需要修改的提示。
2.2 解決辦法
1羹与、按照如下方式修改內(nèi)存映射的限制參數(shù)
vi /etc/sysctl.conf
vm.max_map_count=262144
#生效配置
sysctl –p
說明:設(shè)置可以使用的使用虛擬內(nèi)存的限制和最大線程數(shù)故硅。
2、更改程序可以使用最大內(nèi)存限制
ulimit -m unlimited 在.bashrc中加入 或更改配置文件:/etc/security/limits.conf
說明:設(shè)置程序可以使用的最大內(nèi)存纵搁。
3吃衅、更改程序可以使用的最大虛擬內(nèi)存限制
ulimit -v unlimited 在.bashrc中加入 或更改配置文件:/etc/security/limits.conf【按照這里面的格式來改】
說明:設(shè)置程序可以使用的最大虛擬內(nèi)存。
但是我們由于沒有root用戶腾誉,所以只能采用利用其它Directory徘层,如下:
<directoryFactory name="DirectoryFactory"
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
三、Solr和Zookeeper超時(shí)問題
這是這個(gè)系統(tǒng)第二次的問題了利职,很尷尬趣效,首先同事查到是Zookeeper顯示會(huì)話超時(shí),然后我查了下Solr的GC日志發(fā)現(xiàn)有回收內(nèi)存占用時(shí)間太長的情況猪贪,120秒跷敬,遠(yuǎn)遠(yuǎn)超過了我們?cè)O(shè)置的20秒的超時(shí)時(shí)間,所以報(bào)錯(cuò)热押。
我們?cè)O(shè)置的Solr運(yùn)行內(nèi)存為96G內(nèi)存西傀,按照一般情況來說,這個(gè)是足夠的了桶癣,為什么會(huì)出現(xiàn)這種問題拥褂,用:
jmap -dump:live,format=b,file=out.txt pid
將內(nèi)存輸出到out.txt,直接看的話并沒有發(fā)現(xiàn)什么異常信息牙寞,我們對(duì)照了Solr的故障機(jī)器和其他正常機(jī)器的內(nèi)存占用情況饺鹃,發(fā)現(xiàn)FieldInfo這個(gè)對(duì)象特別多,這個(gè)是索引中字段元數(shù)據(jù)信息的,這個(gè)為什么會(huì)多那尤慰,其他同事查了下索引發(fā)現(xiàn)馏锡,有幾個(gè)索引的字段名超長,這導(dǎo)致字段名占內(nèi)存很大伟端,后面我們通過下線索引的方式驗(yàn)證了下杯道,確實(shí)是這個(gè)問題,有問題的索引下線后责蝠,GC的時(shí)間減少了党巾,再也沒有出現(xiàn)過這個(gè)問題,而且Solr的節(jié)點(diǎn)內(nèi)存占用穩(wěn)定在64G左右霜医。
四齿拂、總結(jié)
Solr性能不錯(cuò),靈活性也還行肴敛,穩(wěn)定性差些署海,有些系統(tǒng)參數(shù)沒有修改竟然沒有提示,這點(diǎn)比ES做的差医男,ES你如果參數(shù)沒有修改是直接不讓你啟動(dòng)的砸狞。
項(xiàng)目實(shí)施中,要多研究下業(yè)務(wù)數(shù)據(jù)镀梭,數(shù)據(jù)是業(yè)務(wù)的核心刀森,從數(shù)據(jù)中可以發(fā)現(xiàn)很多問題,如果這次可以及時(shí)查詢分析报账,就很容易發(fā)現(xiàn)這個(gè)問題研底。
血淋淋的教訓(xùn),希望對(duì)大家有點(diǎn)幫助透罢。