es 高cpu 负载

搜索占用cpu最高的线程

1
2
3
tid=`top -Hp 2725`

top -Hp 17077

17120

查看堆栈

1
2
3
sudo -u elk-user /usr/local/java/jdk1.8.0_131/bin/jstack 2725 > /tmp/es_stack.log

jstack 23265 > /tmp/es_stack.log

拿到占用cpu最高的线程栈

1
2
printf "%x \n" ${tid}
printf "%x \n" 23307

得到 42e0, 然后打开/tmp/es_stack.log 搜索

1
2
3
4
5
6
7
8
9
10

"VM Thread" os_prio=0 tid=0x00007f745c0c8800 nid=0xad2 runnable

"Gang worker#0 (Parallel GC Threads)" os_prio=0 tid=0x00007f745c01b000 nid=0xacf runnable

"Gang worker#1 (Parallel GC Threads)" os_prio=0 tid=0x00007f745c01d000 nid=0xad0 runnable

"Concurrent Mark-Sweep GC Thread" os_prio=0 tid=0x00007f745c04a800 nid=0xad1 runnable

"VM Periodic Task Thread" os_prio=0 tid=0x00007f745c12e000 nid=0xada waiting on condition

大量GC, 看下堆内存发现太小了。 改成1G就好了

jvm.options

1
2
-Xms1024m
-Xmx1024m

参考

找到Linux虚机Load高的”元凶”