skywalking报错就白屏问题:Remote client block times over 60 seconds.

skywalking报错就白屏问题:org.apache.skywalking.oap.server.core.remote.client.GRPCRemoteClient - 182 [DataCarrier.GRPCRemoteClient.Consumser.0.Thread] WARN  
[] - Remote client block times over 60 seconds.

定位原因:因为存储性能而阻塞引起,skywalking导致OAP节点堵死

官方也有人遇到这个问题:https://github.com/apache/skywalking/issues/3116

解决方案:优化写入存储(同样代码,其他项目也遇到这个问题,后来优化es就好了)

1找出新能是什么引起,机器资源部够?还是突然并发
看看es 早上 8点25到8点35这个时间 ,es集群是什么原因导致存储有问题
如果是日志引起,建议es 分集群部署,skywalking单独一个集群3个节点,


优化方案,
日志索引查询用分细一点,避免大规模占用机器资源(8点30这点,感觉有点像使用量大了)

要区分读写节点,热点数据,和最新索引写入性能高只写节点,
刷盘时间适当加大点,用SSD硬盘,和较好cpu机器
旧的日志数据可迁移到大磁盘老机器,如果是资源问题就要加机器了


oap客户端优化方案
6.1升级到6.3 数据载体队列写入索引控制器性能改进。存储比以前快3倍。
涉及到SkyWalking定制化功能迁移,必须删除所有现有索引才能进行升级,后端重新安装、
升级时,探针要重启,和测试一轮相关功能稳定性,升级难度高,
6.1现在稳定跑这么久了,不急于一个问题升级版本


目前的简单快速落地方案,
1 不必要全采样,降低 SkyWalking 应用端的采样率,以减轻存储负载。
2 SkyWalking的ES 服务分集群部署在高配机器上,避免日志影响到监控,这个问题也就必须优化的。

配置备注:
不重要的客户端探针减低采样率,agent.sample_n_per_3_secs: 客户端采样率,默认是-1代表全采样
一般改500到2000之间。

服务端集群减低采样率。(采样率设置集群所有服务端必须相同)
sampleRate: ${SW_TRACE_SAMPLE_RATE:10000} 
采样率精度为1/10000。10000表示默认为100%样本。如果配置为5000则采样率就是50%

3 skywalking写入ES的操作是使用了ES的批量写入接口。
我们可以

调整这些批量的维度。尽量降低ES索引的写入频率,如:
    bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:4000} # Execute the bulk every 2000 requests
    bulkSize: ${SW_STORAGE_ES_BULK_SIZE:40} # flush the bulk every 20mb
    flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:30} # flush the bulk every 10 seconds whatever the number of requests
    concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:4} # the number of concurrent requests
    metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:8000}
   调整bulkActions默认2000次请求批量写入一次改到4000次;bulkSize批量刷新从20M一次到40M一次;
flushInterval每10秒刷新一次堆改为每30秒刷新;concurrentRequests查询的最大数量由5000改为8000。


这种配置调优确实生效了,这种设置只是暂时的,只能期望流量不突发,或者应用不增加。
一旦遇到突发流量和应用的增加,ES写入瓶颈还是会凸显出来。而且参数设置过大带来了一个新的问题,
就是数据写入延时会比较大,所以最终解决方案是优化ES的写入性能


版权声明:本文为liangzanwen原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。