StarRocks BE服務常見問題處理看這篇就夠了
阿新 • • 發佈:2022-03-07
背景
在我們支援客戶的過程中,發現一些客戶在部署和使用StarRocks過程中,遇到BE服務的問題,一般不太清楚應該怎樣排查?關注哪些指標?超過多少是不合理的狀態等。本文從部署到使用過程中,分享StarRocks BE服務常見問題以及處理辦法,希望能幫助大家更好的理解和使用StarRocks。常見問題及處理方法
部署
下面是部署的一些check項,也可直接使用附錄中的Base_check.sh指令碼
- 檢視CPU是否支援AVX2指令集(因為目前StarRocks的向量化引擎依賴)
- 埠檢查
- 配置必要的核心引數
BE服務宕機
目前StarRocks2.0+版本已經修復了OOM的問題,建議老版本的使用者可以升級到2.0+版本
頻繁掛掉
如果BE服務掛掉,拉起後還是掛掉,可以在有問題的be服務be.conf中新增以下配置先禁用compaction,然後再重新拉起BE服務,觀察是否還會掛。 max_compaction_concurrency=0 如果做了上述操作,BE服務不會由於OOM宕機的話,可以確認原因就是由於compaction導致,可能在此之前匯入過大批量的資料。可以嘗試調整max_compaction_concurrency=1先讓之前匯入的資料合併完成(如圖starrocks_fe_tablet_max_compaction_score監控項低於50表示當前compaction是沒有壓力的)。之後可以根據根據max_compaction_concurrency=1時的記憶體佔用適當調整該引數(調整完注意觀察引數)。查詢或匯入報錯:there is no ScanNode backend
- 可以先檢視/proc/sys/vm/overcommit_memory是否配置為1,若不是先修改該配置為1
- 可在be.conf中配置mem_limit=xx%限制BE最大使用記憶體佔比
- 可以檢視下當前並行度(show variables like '%parallel_fragment_exec_instance_num')和單個sql記憶體限制(show variables like '%exec_mem_limit'),當前單個be記憶體使用也會受限於並行度*exec_mem_limit,可以根據BE節點記憶體調整這兩個變數
附錄
#!/bin/bash function cpu_check(){ echo "" echo "############################ CPU檢查 #############################" cat /proc/cpuinfo |grep avx2 2>&1 >/dev/null if [ $? -ne 0 ];then echo -e "\033[31mcpu not support vector\033[0m" else echo -e "\033[32msuccess\033[0m" fi } function jdk_check(){ echo "" echo "############################ JDK檢查 #############################" if [ -z $JAVA_HOME ];then echo -e "\033[31mJAVA_HOME not set\033[0m" else echo -e "\033[32msuccess\033[0m" fi } function swap_check(){ echo "" echo "############################ swap檢查 #############################" swap_number=$(cat /proc/sys/vm/swappiness) if [ $swap_number -ne 0 ];then echo -e "\033[31mswap not close,please \"echo 0 | sudo tee /proc/sys/vm/swappiness\"\033[0m" else echo -e "\033[32msuccess\033[0m" fi } function kernel_check(){ echo "" echo "############################ 引數檢查 #############################" oom_number=$(cat /proc/sys/vm/overcommit_memory) if [ $oom_number -ne 1 ];then echo -e "\033[31mplease \"echo 1 | sudo tee /proc/sys/vm/overcommit_memory\",details in https://www.kernel.org/doc/Documentation/vm/overcommit-accounting\033[0m" else echo -e "\033[32msuccess\033[0m" fi } function fe_port_check(){ echo "" echo "############################ FE 埠檢查 #############################" # default port 8030,9010,9020,9030 ports=$(ss -antpl|grep -E '8030|9010|9020|9030'|wc -l) if [ $ports -ge 0 ];then echo -e "\033[31mFe ports already used,please use \"ss -antpl|grep -E '8030|9010|9020|9030'\" check and reconfig.\033[0m" else echo -e "\033[32msuccess\033[0m" fi } function be_port_check(){ echo "" echo "############################ BE 埠檢查 #############################" # default port 9060,9050,8040,8060 ports=$(ss -antpl|grep -E '9060|9050|8040|8060'|wc -l) if [ $ports -ge 0 ];then echo -e "\033[31mBe ports already used,please use \"ss -antpl|grep -E '9060|9050|8040|8060'\" check and reconfig.\033[0m" else echo -e "\033[32msuccess\033[0m" fi } function check(){ cpu_check jdk_check swap_check kernel_check fe_port_check be_port_check } check總有人要贏得,為什麼不能是我?