最近開始測試部署ELK, 在部署logstash的時候出現一個故障:
logstash在第一次安裝完成以后啟動正常, 但是之后啟動時間越來越長, 5分鍾以上甚至10多分鍾。以至於懷疑程序錯誤, 在重裝以軟件和系統以后問題還是沒有解決。
搜索到github上的一個issue, 解釋如下:
系統的“熵”低了。 查了一下, 這個熵好像是用來生成隨機數的。
如果出現logstash啟動慢,使用如下命令查詢,。
cat /proc/sys/kernel/random/entropy_avail
如果返回值小於1000, 那么就需要安裝haveged包。
jruby啟動的時候jdk回去從/dev/random中初始化隨機數熵,新版本的jruby會用RPNG算法產生隨后的隨機數,但是舊版本的jruby會持續從/dev/random中獲取數字。但是不幸的是,random發生器會跟不上生成速度,所以獲取隨機數的過程會被阻塞,直到隨機數池擁有足夠的熵然后恢復。這在某些系統上,尤其是虛擬化系統,熵數池可能會比較小從而會減慢jruby的啟動速度。
檢查了一下系統的熵數池 cat /proc/sys/kernel/random/entropy_avail
,發現只有65,正常情況這個數字推薦大於1000,對比了一下獨立主機的這個數值,大約在700-900之間晃悠。
解決
最簡單的解決方案是安裝一個熵數發生器,比如 Haveged ,centos可從epel源中獲取,安裝后啟動服務 sudo systemctl start haveged
就可以看到entropy_avail暴漲至2000多,logstash幾乎是秒啟,然后再 sudo systemctl enable haveged
設為開機自啟。
我在安裝了以后, logstash啟動慢的問題解決,在10秒內啟動。
參考鏈接如下: