压测环境

  • k8s容器环境
  • 单核
  • 32GB内存
  • thanos版本:v0.22.0
  • 客户端发送32271959条数据,100个并发;同样的数据文件发送了两遍,取第二遍的性能数据
  • 在thanos receiver CPU占用100%的情况下观察其表现
  • 持续时间:14:29~15:03,33分钟

压测详细数据

1.请求曲线:



查询表达式:sum by (instance) (rate(http_requests_total{handler="receive",method="post",instance="$instance",code="200"}[1m]))*60



查询表达式:sum by () (rate(http_request_size_bytes_sum{instance="$instance"}[1m])/1024/1024)



查询表达式:sum by (code) (rate(http_requests_total{handler="receive",method="post",instance="$instance",code!="200"}[1m]))*60

2.资源情况



查询表达式:sum by (instance) (rate(process_cpu_seconds_total{instance="$instance"}[1m]))*60



查询表达式:

  • 物理内存:sum by (instance) (max_over_time(process_resident_memory_bytes{instance="$instance"}[1m]))/1024/1024/1024

    • 物理内存峰值:25.9GB
    • 压测前的物理内存:13.8GB,内存上涨12.1GB
  • 虚拟内存:sum by (instance) (max_over_time(process_virtual_memory_bytes{instance="$instance"}[1m]))/1024/1024/1024
  • thanos receiver的内存,并没有因为切换tsdb而明显的降低,没有请求后,内存释放得非常缓慢:

    • 从9:30~11:09,共100分钟内,内存从22.8GB减少到13.8GB,减少了9GB

3.sample情况



查询表达式:prometheus_tsdb_head_samples_appended_total{instance="$instance"}

  • 新增data point 85490118,平均 2590610/min, 43177/s



    查询表达式:sum by () (rate(prometheus_tsdb_head_samples_appended_total{instance="$instance"}[1m]))*60
  • 峰值:4807544/min, 80126/s,可以认为thanos receiver单核的极限的处理data point的能力为8万每秒。

4. time series情况:



查询表达式:prometheus_tsdb_head_series{instance="$instance"}



查询表达式:sum by () (rate(prometheus_tsdb_head_series_created_total{instance="$instance"}[1m]))*60

  • 因为同样的数据文件发送了两次,所以time series的总数是一致的;time series总数达到 3934198

    • 平均每个time series有 85490118 / 3934198 = 21.7 个data point(sample)

5. chunk情况:



查询表达式:prometheus_tsdb_head_chunks{instance="$instance"}

  • tsdb的两个参数:"--tsdb.min-block-duration=30m","--tsdb.max-block-duration=30m",因此14:29~14:49达到了tsdb切换的周期



    查询表达式:sum by () (rate(prometheus_tsdb_head_chunks_created_total{instance="$instance"}[1m]))*60

6.其他



查询表达式:prometheus_tsdb_compactions_triggered_total{instance="$instance"}

  • 为什么只在没有请求的时候触发 compaction ?



    查询表达式:prometheus_tsdb_head_truncations_total{instance="$instance"}
  • truncate动作的执行规律,还没搞明白

结论

  • thanos receiver单核处理data point的能力大约在 43177/s ~ 80126/s
  • 粗略的认为:存储 3934198 time series + 85490118个data point花费了12.1GB内存

thanos receiver压测结果分享的更多相关文章

  1. 性能压测诡异的Requests/second 响应刺尖问题

    最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码.debug.fixbug都逐渐收尾,进入上线前的性能压测. 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数 ...

  2. 【Java分享客栈】未来迈向高级工程师绕不过的技能:JMeter压测

    前言 因为工作需要,久违的从自己的有道云笔记中去寻找压测相关的内容,翻开之后发现还不错,温故一遍后顺便整理出来分享给大家. 题外话,工作8年多,有道云笔记不知不觉都6G多了,扫一眼下来尽是云烟过往,竟 ...

  3. 阿里云PTS分享-用性能测试工具JMeter实现基于供应链业务上对于WebSocket 协议的压测

    性能测试PTS(Performance Testing Service)是面向所有技术相关背景人员的云化性能测试工具,孵化自阿里内部平台.有别于传统工具的繁复,PTS以互联网化的交互,面向分布式和云化 ...

  4. 【分享】thanos receiver的grafana报表配置

    具体的部署是:用prometheus抓取thanos receiver的10909端口,然后grafana再请求这个prometheus 具体的JSON配置请见最后 本文的一些监控配置,参考了这篇文章 ...

  5. azure存储压测的问题(农码主观意识太强被坑了)

    由于公司想把部份业务迁到windowsazure,主要是应用winodwsazure的存储;在方案中为了体现存储的可靠性所以对winodwsazure存储进行了一系列的测试.但在读取压力测试环节中发现 ...

  6. jmeter 压测最近的心得体会

    笔者14年入坑测试,截止到17年年初一直在游戏公司,压测,我都没有怎么用过,特别是jmeter去压测,自己学习,可是先找到切入点,于是乎, 其实也算是我学习后,先找一个更大的平台吧,我聊了几个游戏公司 ...

  7. 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控【转】

    概述 本文我们将介绍如何使用JMeter+InfluxDB+Grafana打造压测可视化实时监控. 引言 我们很多时候在使用JMeter做性能测试,我们很难及时察看压测过程中应用的性能状况,总是需要等 ...

  8. PostgreSQL 一主多从(多副本,强同步)简明手册 - 配置、压测、监控、切换、防脑裂、修复、0丢失 - 珍藏级

    参考来源: https://github.com/digoal/blog/blob/master/201803/20180326_01.md#postgresql-一主多从多副本强同步简明手册---配 ...

  9. 【免费培训】腾讯WeTest&TesterHome WorkShop | 一起学压测

    2019年,中国移动软件市场仍呈现快速增长趋势,移动新生态孕育而生.而移动软件质量问题越发受到用户的关注,成为用户体验的关键因素.目前移动软件测试人才稀缺,而性能测试作为一项高门槛.高技术的测试能力, ...

随机推荐

  1. java 多线程 Thread 锁ReentrantLock;Condition等待与通知;公平锁

    1,介绍: import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;   在JA ...

  2. ThreadLocal的正确使用与原理

    ThreadLocal是什么 ThreadLocal是线程Thread中属性threadLocals即ThreadLocal.ThreadLocalMap的管理者,ThreadLocal用于给每个线程 ...

  3. IDEA微服务项目SpringBoot一键(批量)顺序启动

    找到 搜索 RunDashboard <option name="configurationTypes"> <set> <option value=& ...

  4. SpringBoot中Post请求提交富文本数据量过大参数无法获取的问题

    yml增加配置 # 开发环境配置 server: tomcat: max-http-form-post-size: -1

  5. c++设计模式概述之模板方法

    代码写的不够规范,目的是为了缩短文章篇幅,实际中请不要这样做. 1.概述 如其名,模板,也就是说,有一个已经做好的模板把框架做好了,剩下的,只需要我们将内容填充到模板下. 例如修房屋,框架结构搭建完成 ...

  6. treecnt 算法马拉松20(告别美国大选及卡斯特罗)

    treecnt 基准时间限制:1 秒 空间限制:131072 KB 给定一棵n个节点的树,从1到n标号.选择k个点,你需要选择一些边使得这k个点通过选择的边联通,目标是使得选择的边数最少. 现需要计算 ...

  7. Java中PO、DO、DTO、 VO、 BO、POJO 、DAO、TO的概念

    1.  PO(persistant object) 持久对象 在 O/R 映射的时候出现的概念,如果没有 O/R 映射,没有这个概念存在了. 通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的 ...

  8. Linux 离奇磁盘爆满解决办法

    问题原因&通用解决步骤 频繁收到es数据节点磁盘使用监控告警,到es上查看,磁盘使用率40%,因此登录该告警服务器,df -h 查看,如图 发下根目录使用超过了80%,因此持续告警,按照以往办 ...

  9. Java Web程序设计笔记 • 【第10章 JSTL标签库】

    全部章节   >>>> 本章目录 10.1 JSTL 概述 10.1.1 JSTL 简介 10.1.1 JSTL 使用 10.1.2 实践练习 10.2 核心标签库 10.2. ...

  10. Java初学者作业——用户输入一个小数,程序分解出整数部分和小数部分。

    返回本章节 返回作业目录 需求说明: 用户输入一个小数,程序分解出整数部分和小数部分. 实现思路: 接收用户控制台输入的小数. 用强制类型转换将整数部分得到. 使用用户输入的小数减去整数部分得到小数部 ...