elasticsearch维护中常遇到的问题-续

       目前遇到了elasticsearch间隔30到40天就会进行FGC(Full Garbage Collection全堆范围的垃圾回收)的问题.
  现象:在30多天的时间范围内swap使用率慢慢攀升,当使用率达到触发FGC时,elasticsearch的性能急剧下降,处于勉强可用的状态, 说明jvm平时就使用到了swap,然而内存commit率并不高,可以调低swap的使用权重.
       查询swap默认权重:

cat /proc/sys/vm/swappiness

  swappiness,Linux内核参数,控制换出运行时内存的相对权重。swappiness参数值可设置范围在0到100之间。 低参数值会让内核尽量少用交换,更高参数值会使内核更多的去使用交换空间。默认值为60(参考网络资料:当剩余物理内存低于40%(40=100-60)时,开始使用交换空间)。

       查到的资料都是下面这些做法:

1
2
3
4
5
6
7
8
9
Step1. root 用户临时关闭
swapoff -a
sysctl vm.swappiness=0

Step2. 修改 /etc/fstab,注释掉 swap 这行
Step3. 修改 /etc/sysctl.conf,添加:
vm.swappiness = 0
Step4. 确认是否生效
sysctl vm.swappiness

  但这种做法有种风险,当真的内存不够用时,可能会在你没发现任何征兆的情况下,发生OOM Killer,使有的进程直接被系统杀掉以释放内存;
       更安全的做法是把swappiness设为1; 这样可以通过swap使用率的变化以及观测到elasticSearch的性能急剧下降,从而给你进一步调优和诊断问题的时间,来判定内存是否真的不够用;
  可以通过cat /proc/[pid]/status 查看某个进程使用Swap的大小, 再用dstat指令监控page in/out发生的时间。

窗外雨后初晨:
morning-after-a-rain