ES啓動時的自動檢查_5

1、堆內存檢查

1)、若設置bootstrap.memory_lock爲true,jvm將會鎖定初始堆內存;若初始堆大小不等於最大堆內存,在調整堆內存大小之後jvm堆不可能均鎖定在內存中;
2)、若要通過堆內存大小校驗,則需配置堆的大小;

2、文件描述符檢查:

1)、文件描述符是unix系統的一個結構,用於操作文件,unix系統當中一切皆文件,文件可以是物理的文件、虛擬的文件(/proc/loadavg)或者網絡套接字;
2)、ES需要大量的文件描述符,每個分片有多個segments和其他文件組成,加上與其它節點之間的連接等;檢查主要針對OS X和Linux系統;

3、最大線程數檢查:

1)、ES執行請求會將請求拆分成多個階段,然後在不同的階段使用不同的線程池去執行,因此ES需要能夠創建大量的線程;
2)、最大線程數校驗是爲了確保ES在通常情況下可以創建足夠的線程數,該校驗在Linux系統上是強制執行的;若使用Linux系統,必須要配置ES最低能創建4096個線程;Linux系統可通過配置文件/etc/security/limits.conf使用nproc來設置;

4、文件大小檢查:

1)、segment文件作爲單個分片的組件以及translog文件可以非常大(達到數GB);系統上若限制es進程產生超過最大文件大小的文件將會導致寫失敗,爲避免這種情況,一種安全的做法就是不限制最大文件大小,而這也是文件大小校驗目的;
2)、若要通過文件大小檢查,則需要配置允許ES進程創建文件無大小限制;Linux可通過配置文件/etc/security/limits.conf使用fsize來設置;

5、最大虛擬內存檢查:

1)、ES和Lucene使用mmap可以很好地將索引的一部分映射到es內存地址空間內,這將某些索引數據放在jvm堆內存之外但是在系統內存之內以實現快速訪問;爲了使該方法有效,應該使ES擁有無限制的內存地址空間;
2)、該項在Linux系統中強制檢查,要通過該步驟,需要在系統中通過增加’ - as unlimited’配置到/etc/security/limits.conf文件中;

6、客戶端虛擬機檢查:

1)、open jdk派生的jvm有兩種不同的jvm: client jvm和server jvm;這些jvm使用不同的編譯器將java字節碼變成可執行的機器碼;
2)、client jvm側重於應用啓動時間少以及內存佔用低,而server jvm側重於最大化代碼性能,兩種jvm之間的性能差異很大;
3)、client jvm檢查就是確保es不在client jvm模式下運行,所以啓動ES需要在server jvm下啓動,現在系統默認都是以server jvm模式啓動;

7、串行垃圾收集器(serial collector)使用檢查:

1)、針對不同的工作負載open jdk派生的jvm擁有不同的垃圾收集器,串行垃圾收集器(serial collector)適用於單核cpu機器或者堆內存很小的情況下使用,而這兩種情況都不適合運行ES,將串行垃圾收集器(serial collector)與ES共同使用將極大地限制ES的性能;
2)、爲避免這種情況需要確保ES沒有配置串行垃圾收集器(serial collector),ES啓動時不要配置串行垃圾收集器(serial collector),默認使用CMS收集器;

8、g1 gc檢查:

已知jdk8中附帶的HotSpot jvm早期版本存在一些問題,當啓用g1 gc收集器時,因爲jvm的問題可能會導致索引損壞;受影響的版本早於jdk 8u40版本附帶的HotSpot,而g1 gc檢查會檢測到這些早起版本的HostSpot jvm;

9、集羣發現檢查:

默認情況下,ES啓動時會在同一主機上取發現其它運行的節點,若在幾秒鐘內未發現master節點,則ES將形成一個包含其它已發現節點的集羣;這在開發環境無需額外就可形成集羣非常有用,但對於生產環境則不適用,因爲這樣可能會因爲腦裂形成多個集羣從而丟失數據;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章