vm-storage在全部都是新metric情况下的写入性能测试
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
vm-storage中,写入索引的性能要比写入data point慢很多。
通常,每条time series的数据,索引的数量是label总数的4~6倍。例如,一条time series有10个label,则至少会创建40个索引。
假设发送给vm-storage的数据全都是全新的metric,vm-storage的极限写入性能到底在什么范围呢?以下是我的测试。
1.基础信息
- CPU 1核
- 内存 8GB
- 本地磁盘(应该是SATA盘)
- metric的平均长度:700字节
- vm-storage版本:v1.78.0-cluster
- 压测方法:使用remote write协议写入完全不同的metric数据,每次发送1000条,每核50个并发,一共5核。
- vm-insert 2 实例,共8核,资源充足
- vm-insert的关键参数如下:
-maxConcurrentInserts=默认值:默认每个核四个并发。这个配置很合理,建议不要修改。-sortLabels: 开启label的排序。推荐开启。-insert.maxQueueDuration=3s: 当写入数据太多导致繁忙后,请求最多在队列里面等待3秒。超过3秒还没有资源处理,就会向后端返回503错误。这个时间建议略小于remote write客户端的请求超时时间。-dropSamplesOnOverload: 非常重要,为了保护vm-insert自身,在vm-storage变慢后,立即丢弃数据,避免vm-insert自身的内存爆掉而产生雪崩。
2.vm-storage性能表现
- CPU占用:0.87核~0.93核 (相当于CPU资源已经到瓶颈了)
- 内存:6.33GB, 占79%
- 网络入流量:160kb ~ 200kb
- 磁盘读:6.91MB,最高延迟 25ms
- 磁盘写:8.14MB,最高延迟 43ms
- 新的metric的占比 100%, slow insert的占比100%(显而易见) , tsid cache的miss率 100%(显而易见)
- 每秒写入的新metric数量:5998/s
- 新metric与索引数量的倍数关系:29.4 (平均每条metric创建将近30条索引)
- tsid cache占用百分比:98.7%
- 由此可见:新的metric会写入tsid cache,以便于下次插入相同metric的时候能够提速。如果存在大量昙花一现的metric,必然导致tsid 的 cache miss升高,进而导致slow insert增多。
- vm-insert端:
- 请求量:11.1万/s
- 丢弃量:10.8万/s
3.总结
- 当所有的time series都是全新的情况下, vm-storage的的单核的极限写入性能大约是:6000/s
- 当全是新metric时:磁盘读是写入流量的 35.4 倍, 磁盘写是写入流量的 41.7 倍
- 当写入量过大时,CPU是瓶颈,其次是内存。网络流量和磁盘IO的资源占用相对较小。
- 当vm-storage过载时,表现为写入减少,写入延迟升高:
- 从而,vm-insert的写入协程进入阻塞;
- 当设置了vm-insert的
-dropSamplesOnOverload参数时,vm-insert会把无法发送给vm-storage的数据立即丢弃。 - 当remote write的请求,在vm-insert上的阻塞时间达到了
-insert.maxQueueDuration的时间后,vm-insert会返回http 503错误。 - 因此:remote write客户端收到503错误后,要减小发送频率;而非503错误要重试一定次数。
- vm-insert上如果发现
vm_rpc_rows_dropped_on_overload_total的数据,则说明vm-storage开始过载,需要扩容; - 如果vm-storage的过载是因为短期的新metric太多,应该等一会儿,等到tsid cache的命中率提升后恢复正常写入;
vm-storage在全部都是新metric情况下的写入性能测试的更多相关文章
- Hive&SqlServerql:inner join on条件中如果两边都是空值的情况下,关联结果中会把数据给过滤掉。
今天遇到的一个大坑,话不多少,看sql和下边的查询结果: --问题:恰好把buildingid is null的记录给过滤掉 ),buildingid ),)); ); ); ); ); ); ); ...
- base 使网页所有超链接都以新超链接的方式打开
需求,网页有许多超链接,但是没有加 target="_blank",现在需要所有超链接都已新页面的方式打开 在head头添加 <base target="_blan ...
- 代码方式设置WordPress内所有URL链接都在新标签页打开
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=699 前言: WordPress默认情况下几乎所有URL链接都是在同一个标签页打开.这样的话,读者点击一个链接就会离 ...
- webpack用了manifest为何还是每次都生成新的vendor?
原来的代码 //用于提取公共代码 new webpack.optimize.CommonsChunkPlugin({ //记得要在开头引入webpack names: ['vendor','manif ...
- CentOS系统在不重启的情况下为虚拟机添加新硬盘
一.概述 用过虚拟机的都知道,如果在系统运行的时候去给虚拟机添加一块新设备,比如说硬盘,系统是读取不到这个新硬盘的,因为系统在启动的时候会去检测硬件设备.但是我们也可能会遇到这样的情况,比如正在运行比 ...
- 在不连接网线的情况下Windos与VM之间如何ping通
一般情况下,如果宿主主机的网口连接网线并且能够上网,那么按照VM的默认安装,在VM-Settings-Hardware-Network Adapter-Network connection中选择Bri ...
- 03-移动端开发教程-CSS3新特性(下)
1. CSS3动画 1.1 过渡的缺点 transition的优点在于简单易用,但是它有几个很大的局限. transition需要事件触发,所以没法在网页加载时自动发生. transition是一次性 ...
- 关于RecyclerView你知道的不知道的都在这了(下)
目录 目录 正文 6. Recycler 7. ItemAnimator 8. ItemDecoration 9. OnFlingListener 目录 由于本篇篇幅特长,特意做了个目录,让大伙对本篇 ...
- 微信、QQ、新浪微博等第三方登录,你想知道的都在这了(上) 微信、QQ、新浪微博等第三方登录,你想知道的都在这了(下)
微信.QQ.新浪微博等第三方登录,你想知道的都在这了(上):https://www.jianshu.com/p/133d84042483 微信.QQ.新浪微博等第三方登录,你想知道的都在这了(下):h ...
- 萌新笔记——linux下查看内存的使用情况
windows上有各种软件可以进行"一键加速"之类的操作,释放掉一些内存(虽然我暂时不知道是怎么办到的,有待后续学习).而任务管理器也可以很方便地查看各进程使用的内存情况,如下图: ...
随机推荐
- 华为云GaussDB新产品特性亮相DTC2021,重磅新品开源预告
摘要:华为云数据库产品部CTO庄乾锋携3位GaussDB技术专家在DTC2021大会上分享了产品最新技术.优秀实践案例,以及透露了重大新品即将开源,以数据驱动业务发展,为企业数字化转型持续注入新动力. ...
- vmware14安装centos8
vmware14 推荐,直接选取centos8镜像,然后安装,发现是无法安装的. 然后选择自定义安装,然后,选择客户机操作系统,只有centos7 64位,没有centos8 64位的. 搜了一下,看 ...
- .Net Core 中 MemoryCache 使用
1.Demo,实际项目中不这么使用 class Program { static void Main(string[] args) { //缓存的配置 MemoryCacheOptions cache ...
- Runnable接口的 run() 方法和start()方法
1.start()方法来启动线程,真正实现了多线程运行.这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码:通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就 ...
- peewee 操作 sqlite 锁表问题分析
在使用python orm 框架 peewee 操作数据库时时常会抛出以一个异常,具体的报错就是 database is locked 初步了解是因为sqlite锁的颗粒度比较大,是库锁.当一个连接在 ...
- django中间件需要了解的方法 importlib模块 csrf校验策略 csrf相关装饰器
目录 django中间件三个需要了解的方法 process_view process_exception process_template_response 基于django中间件实现功能的插拔式设计 ...
- Ajax请求 content_type ajax发送Fromdata对象
目录 Ajax请求入门 ajax实现简单计算器 content_type urlencode fromdata application/json 自定义request.JSON ajax发送Fromd ...
- 干掉大小流切换 I 帧!阿里云 RTC QoS 及视频编码联合优化之切流编码
如果要在两条分辨率不同的视频流之间切换,尽管这两条流的画面内容基本一样,但是由于两条流的参考帧不同,分辨率不同,目前所有的视频编码标准都无法做到利用帧间预测编码得到编解码匹配的结果,而帧内预测编码即 ...
- CMake + Protobuf 自动生成 cpp 文件(pb.h, pb.cc)
[Protoc]VS2019 (VS平台) 使用 CMake 编译安装.使用 Protobuf 库 本文介绍在 macOS 系统下 cmake 和 protobuf 一起使用的一种方式--使用 cma ...
- Codeforces Round #694 (Div. 2) A~D、E
比赛链接:Here 1471A. Strange Partition 题意: 给一个数组,数组中的所有元素可以任意合并,求数组的每个元素除以x上取整的和,求结果的最大值和最小值. 思路: 瞎猜.最小值 ...
