1. 程式人生 > >elasticsearch CPU過高原因查找

elasticsearch CPU過高原因查找

elasticsearch CPU

今天稍微壓了了一下線上的ES集群,發現CPU 過高,線上用的是4核16G。

找到ES的進程14642,

執行 top -Hp 14642

選取其中一個過高的線程

jstack 14642 | grep -A 30 3989

發現

技術分享圖片

你也可以用

jstack 14642 >>jstack.out 導出數據

然後執行

jstat -gcutil 14642

發現GC正常,初步確定是CPU核數過低, CPU 處理不過來,TAKE 結果時沒有數據,阻塞。

while (_size.get() == 0)
{
_notEmpty.await();
}, 此時CPU空轉。

之所以用take,是因為ES有5個分片,獲取數據時,要使用5個線程,得到數據後要合並數據,所以必須等到5個線程的數據都進來,才能往下走。

使用下面的命令,也可以發現一些端倪

curl -XGET "http://localhost:9200/_nodes/hot_threads?pretty"

打算先增加CPU看看結果再說。

elasticsearch CPU過高原因查找