SkyWalking 性能优化

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 如果你正在使用SkyWalking作为分布式跟踪系统,而且是使用elasticsearch作为存储引擎,那么这篇文章中针对SkyWalking的优化你可以关注一下。

OAP优化

skywalking写入ES的操作是使用了ES的批量写入接口,我们要做的是调整相关参数尽量降低ES索引的写入频率。


参数调整主要是针对skywalking的配置文件application.yml,相关参数如下:


storage:
elasticsearch:
bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:4000} #Executethebulkevery2000requestsbulkSize: ${SW_STORAGE_ES_BULK_SIZE:40} #flushthebulkevery20mbflushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:30} #flushthebulkevery10secondswhateverthenumberofrequestsconcurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:4} #thenumberofconcurrentrequestsmetadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:8000}


  • 调整bulkActions默认2000次请求批量写入一次改到4000次;


  • bulkSize批量刷新从20M一次到40M一次;


  • flushInterval每10秒刷新一次堆改为每30秒刷新;


  • concurrentRequests查询的最大数量由5000改为8000。


参考网址:https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html


ES优化

JVM参数调整


此部分主要是针对es的配置文件jvm.options


  • 配置修改


    根据服务器配置调整JVM参数,需要设置-Xmn参数指定新生代的大小,-Xmn的值可以设置成-Xmx的3/8左右:


-Xms6g-Xmx6g-Xmn2g


  • 解释说明


    这里说明一下为什么要显式指定-Xmn的大小。在刚开始我也没设置-Xmn参数,但是通过观察gc日志发现ES一直在频繁进行Young GC,达到1秒一次。而且新生代大小小于理论配置大小。


gc日志:


[2019-12-23T03:24:11.002+0000][1][gc,heap      ] GC(269053) ParNew: 419674K->11981K(460096K)
[2019-12-23T03:24:11.002+0000][1][gc,heap      ] GC(269053) CMS: 1646907K->1646907K(2634560K)
[2019-12-23T03:24:11.002+0000][1][gc,metaspace ] GC(269053) Metaspace: 86889K->86889K(1130496K)


当时设置的-Xmx 和 -Xms为3g,如果按照默认配置-XX:NewRatis=2那么新生代应该有1g左右,但是实际上只有460M,为了减少Young gc的频率需要显式使用-Xmn指定新生代大小。


大家可以参考博文 CMS GC 默认新生代是多大?,很好的解释了为什么CMS垃圾回收时默认新生代的大小不是根据-XX:NewRatis=2计算而得。


索引参数优化


给ES配置高性能写模式主要是修改es配置文件elasticsearch.yml中的index相关配置,主要修改如下几个参数


"index.merge.scheduler.max_thread_count" : "1",
"index.refresh_interval" : "30s",
"index.translog.durability" : "async",
"index.translog.sync_interval" : "120s"


参考网址:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/tune-for-indexing-speed.html


结语


本篇主要是针对skywalking单机版优化,由于skywalking对es的操作非常多,如果单机版es扛不住的话还是最好还是使用skywalking的集群模式。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
存储 缓存 分布式计算
Spark任务OOM问题如何解决?
大家好,我是V哥。在实际业务中,Spark任务常因数据量过大、资源分配不合理或代码瓶颈导致OOM(Out of Memory)。本文详细分析了各种业务场景下的OOM原因,并提供了优化方案,包括调整Executor内存和CPU资源、优化内存管理策略、数据切分及减少宽依赖等。通过综合运用这些方法,可有效解决Spark任务中的OOM问题。关注威哥爱编程,让编码更顺畅!
726 3
|
监控 Java Docker
从零开始,用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合
从零开始,用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合
2431 0
|
存储 Prometheus 监控
Prometheus 的报警机制:Alertmanager 的配置与使用
【8月更文第29天】Prometheus 是一个非常强大的监控系统,它不仅能够收集和存储时间序列数据,还能通过 Alertmanager 提供灵活的报警机制。Alertmanager 负责接收 Prometheus 发送的警报,并根据配置的规则执行相应的通知动作。本文将详细介绍如何配置 Alertmanager 以及如何使用它来实现基于 Prometheus 指标的报警通知。
4076 1
|
消息中间件 Java Kafka
skywalking日志收集
skywalking日志收集
skywalking日志收集
|
关系型数据库 MySQL Java
入门篇:如何快速安装和破解Confluence, 打造您的完美知识库
入门篇:如何快速安装和破解Confluence, 打造您的完美知识库
|
关系型数据库 数据库 PostgreSQL
【docker-compose】一键安装PostgreSQL数据库
【docker-compose】一键安装PostgreSQL数据库
5626 0
【docker-compose】一键安装PostgreSQL数据库
|
消息中间件 监控 安全
Kafka客户端工具:Offset Explorer 使用指南
Kafka客户端工具:Offset Explorer 使用指南
10131 0
|
负载均衡 算法 Nacos
SpringCloud之LoadBalancer自定义负载均衡算法,基于nacos权重
ReactorLoadBalancer接口,实现自定义负载算法需要实现该接口,并实现choose逻辑,选取对应的节点。
1485 0
|
消息中间件 测试技术 领域建模
DDD - 一文读懂DDD领域驱动设计
DDD - 一文读懂DDD领域驱动设计
44107 6
|
Oracle 安全 Java
JDK收费的各个版本(记录一下)
JDK收费的各个版本(记录一下)
13488 1