现象
ElasticSearch节点所在机器部署了其他服务后,ElasticSearch的写入性能下降了。使用cgroup隔离了ES进程和其他服务的CPU,服务部署后ElasticSearch节点可用机器内存减少了一半以上
理论分析
部署其他服务后后ES可用的page cache量下降了一半,ES依赖page cache进行写操作,page cache大小降低可能导致page fault发生频率增高,影响写入性能
测试过程
- 部署ES,模拟正常的写入流量
- 执行sar -B 1 60命令,观察page cache指标
- 创建一个占144GB的进程,该进程除了占内存外无其他操作
- 观测page cache等指标
测试结果
- page cache使用量下降,从128GB降到46GB
- page in, page out, major page fault频率显著增加(06:11:48之后
操作时间 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
操作前1分钟 22.00 276339.07 86604.02 0.02 144997.05 4564847.45 9912.78 2965.77 0.06
操作后1分钟 987.20 258302.65 440210.45 2.23 474992.83 3564184.18 1136200.70 347292.93 7.39
操作后2分钟 7654.67 230166.48 943175.17 5.95 227220.80 4083424.47 636770.77 106352.42 2.25
操作后3分钟 5579.42 282259.42 469521.05 3.35 120995.90 4617239.30 67159.00 8024.97 0.17
操作后2小时 11628.35 292470.47 433449.10 3.82 149460.33 3524461.10 0.00 68.77 0.00
-
磁盘读IO上涨,每分钟的read_request从个位数涨到几百。CPU.iowait上涨,从4%上涨到9%作业。原因是page fault会触发读磁盘数据到page cache
-
由于写入流程触发page fault导致写入延时增加,ES写入性能下降,吞吐大约下降了21%,延迟上涨了20%
结论
内存占用导致page cache空间减少,继而ES写入性能下降