opentsdb 优化读速度,解决OOM和StackOverflowError
发布网友
发布时间:2022-12-07 23:56
我来回答
共1个回答
热心网友
时间:2024-10-12 23:52
最近项目中遇到了opentsdb查询速度慢的问题。不管数据少还是多,查询的总是很慢,而且查询返回的数据量过大的时候会出现OOM。
opentsdb是基于Hbase的,最后找到解决的方法可以把Hbase的BucketCache增大。
原理是什么呢?其实就是增大查询时候的缓存。HBase数据按照block块存储,默认是64K,HBase中提供两种BlockCache的实现:默认on-heap LruBlockCache和BucketCache(通常是off-heap)。通常BucketCache的性能要差于LruBlockCache,然而由于GC的影响,LruBlockCache的延迟会变的不稳定,而BucketCache由于是自己管理BlockCache,而不需要GC,因而它的延迟通常比较稳定,这也是有些时候需要选用BucketCache的原因。详见 HBase那些事
了解到这之后还有点疑问,什么是on-heap,off-heap?你可以参考 JVM中的堆外内存(off-heap memory)与堆内内存(on-heap memory)
至于如何进行修改,以及更详细的解释,可以参考 hbase官方文档 。
github上面有一个相关的 issues ,2014年提出的,至今仍是open的状态,大神们解决的方式都是通过修改JVM stack的大小,确实能解决问题,操作过程如下:
这个错误也很恶心,没找到好的办法,看到 有篇文章 是通过修改opentsdb的源码来解决的。目前的做法是把全量数据进行聚合,以更大的时间粒度来存储,减小查询时返回的数据量,如果哪位大佬可以解决此问题,可以留言或私信,感激不尽~
最近阅读 官方文档 ,找到了适合我项目的处理方法,完美解决以上所有问题,如果你的数据可以拆分为多个metric,可以试试这种方法,把每个metric中的数据基数变小,而且由于Hbase是以Rowkey的方式检索,所以速度会更快。
opentsdb 优化读速度,解决OOM和StackOverflowError
最近项目中遇到了opentsdb查询速度慢的问题。不管数据少还是多,查询的总是很慢,而且查询返回的数据量过大的时候会出现OOM。opentsdb是基于Hbase的,最后找到解决的方法可以把Hbase的BucketCache增大。原理是什么呢?其实就是增大查询时候的缓存。HBase数据按照block块存储,默认是64K,HBase中提供两种Block...