skywalking之elasticsearch cpu高

最近apm项目比较火,作为Apache的顶级项目之一的skywalking线上搭建部署.里面用到了elasticsearch作为存储引擎,作为JAVAEE的我其实对elasticsearch不是很熟,就当睬坑了吧,然后将事情的经过记录下来,希望能帮助到遇到问题的你,当然有问题也可以线下沟通,或者留言.

 

ES线上集群环境,运行一段时间之后就出现cpu100%的情况. 

如图:

此机器cpu是4核,memory 8G

通过性能分析发现是平均每秒发生一次ygc,修改jvm的gc策略后无果.

只能先通过升级配置,

cpu 4核—>8核

memory 8G—>16G

 

后续修改,jvm配置如下:

运行几个小时之后发现cpu又变高了.然后google,修改elasticsearch.yml

index.merge.scheduler.max_thread_count: 1 # 索引 merge 最大线程数

indices.memory.index_buffer_size: 30%     # 内存

index.translog.durability: async # 这个可以异步写硬盘,增大写的速度

index.translog.sync_interval: 120s #translog 间隔时间

discovery.zen.ping_timeout: 120s # 心跳超时时间

discovery.zen.fd.ping_interval: 120s     # 节点检测时间

discovery.zen.fd.ping_timeout: 120s     #ping 超时时间

discovery.zen.fd.ping_retries: 6     # 心跳重试次数

thread_pool.bulk.size: 20 # 写入线程个数 由于我们查询线程都是在代码里设定好的,我这里只调节了写入的线程数

thread_pool.bulk.queue_size: 1000 # 写入线程队列大小

index.refresh_interval: 300s #index 刷新间隔

 

重启之后发现elasticsearch6.5不支持对index级别的设置,给出提示使用

curl -XPUT  -H "Content-Type:application/json" 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{

  "index.merge.scheduler.max_thread_count" : "1",

  "index.refresh_interval" : "30s",

  "index.translog.durability" : "async",

  "index.translog.sync_interval" : "120s"

}'

然后修改对应localhost执行提示:

Can't update non dynamic settings

然后继续google,

https://stackoverflow.com/questions/19758335/error-when-trying-to-update-the-settings

显示需要先close索引,然后再执行,最后成功之后再打开

curl -XPOST 'http://localhost:9200/_all/_close'

 

curl -XPUT  -H "Content-Type:application/json" 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{

  "index.merge.scheduler.max_thread_count" : "1",

  "index.refresh_interval" : "30s",

  "index.translog.durability" : "async",

  "index.translog.sync_interval" : "120s"

}'

curl -XPOST 'http://localhost:9200/_all/_open'

运行几个小时继续截图

settings.index.merge.scheduler.max_thread_count

合并调度程序(ConcurrentMergeScheduler)在需要时控制合并操作的执行(根据合并策略)。

default:

    Math.max(1, Math.min(3, Runtime.getRuntime().availableProcessors() / 2))

index refresh_interval: 设置成30s

    因为刷新很昂贵,所以提高索引吞吐量的一种方法是增加refresh_interval。较少刷新意味着负载较少,并且可以将更多资源转移到索引线程。

 

 

 

持续关注cpu问题

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值