jimdb压测踩坑记
本文记录在jimdb压测过程中遇到的各种小坑,望能够抛砖引玉。
1.压测流量起来后,过了5分钟左右,发现ops突降,大概降了三分之一,然后稳定了下来
大概原因:此种情况,jimdb极有可能某个分片的连接数打满,从而导致分片的cpu达到100%。
调优方案:首先,默认分片连接数为1w,此时可以根据自己的需求,如果自己的docker数量很少,可以调整成2w,反之则3w。
然后,看程序中的操作,是不是有pipeline或者mget等操作,如果有,且程序日志中输出了大量的can't get jedis connection from jedis pool,则调整如下线程池,直至找到比较合适的值:
如果程序中普通的redis命令操作比较多,则可以调整如下参数,注意maxIdelPerKey不要超过64,否则无效,MaxTotalPerKey太大会造成连接数过多,太少会造成频繁连接,需要根据具体压测情况设置合适的值:
另外,连接的超时时间等不可设置过长,建议设置如下:
上面参数的调整,需要压测十几次甚至几十次,才能慢慢的调整出jimdb合理的参数值,合理的表现就是:
比如说第一波压测,jimdb参数优化前,慢慢起量,并发到5000的时候,jimdb因为某个分片连接数和cpu过高,挂了。那么参数的调优,就可以以5000并发为基础慢慢调整,直至调整出5000并发不会将jimdb分片打挂的情况。则视为当前jimdb调整参数合理。更加理想的情况就是,jimdb参数调整完毕后,你加500甚至1000并发上去,jimdb还能扛得住,这种情况,则说明jimdb参数调整非常合理。
切忌遇到jimdb分片挂了后,以为是性能问题,然后更换分片操作,由于新分片追加上来后,连接数都被清理光了,再起压测,因为压力反而不会很大,所以反而显得正常,但是此种情况下是及其不正常的,极有可能重启docker集群后再压测,依然会挂。
一旦jimdb分片打挂后,重新进行下一波压得的时候,记得将docker集群的所有机器重启一下,以便于清理掉连接数,否则的话,直接进行压测,会频频的导致分片数挂掉的情况。
调整参数后,效果不明显的话,也建议重启下docker集群。
如果不想重启jimdb集群的话,jimdb中清理集群命令也可以达到释放连接数的目的。
2. 压测流量起来过程中,有一个点,整体ops为0
分为几种情况
情况1,需要检查程序中是否有jmq生产,然后监控下jmq生产性能,如果压测过程中在某个点踩中了jmq生产的tp max点(一般会是2002ms,4002ms左右),会造成当前点ops为0;
情况2,需要检查程序中是否有fullgc产生或者频繁的younggc(一分钟超过三四十次),且youggc耗时普遍超过40ms以上
情况3,jvm老年代不释放,比如本地缓存写成了static,满了后又没有过期策略等(参见tomact中session保持)
其他情况。。。。。
3. 压测过程中,感觉没什么jimdb瓶颈,加docker后方法ops死活上不去或者上去的一点儿不明显
如果你程序中有jmq生产,在jmq生产性能这块,如果数据允许丢失,可以让jmq运维给你换成异步刷盘,同时加一些broker,则ops将会有明显提升
其他情况。。。。
4. 方法整体tp999很差
情况1, jmq生产性能或者消费性能
情况2, jimdb参数设置,可以参考第一条,通过压测获取合理值
情况3, 垃圾收集器设置,实践证明,G1垃圾收集器不仅可以用于大于4G的堆内内存上,也可以用于小于4G的堆内内存上
情况4, jvm堆内内存设置
情况5, 其他耗费性能的地方,比如多余的操作,无意义的操作等等
jimdb压测踩坑记的更多相关文章
- iOS自动化打包上传的踩坑记
http://www.cocoachina.com/ios/20160624/16811.html 很久以前就看了很多关于iOS自动打包ipa的文章, 看着感觉很简单, 但是因为一直没有AppleDe ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- 【踩坑记】从HybridApp到ReactNative
前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...
- Spark踩坑记——共享变量
[TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...
- Spark踩坑记——从RDD看集群调度
[TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...
- djangorestframework+vue-cli+axios,为axios添加token作为headers踩坑记
情况是这样的,项目用的restful规范,后端用的django+djangorestframework,前端用的vue-cli框架+webpack,前端与后端交互用的axios,然后再用户登录之后,a ...
- HttpWebRequest 改为 HttpClient 踩坑记-请求头设置
HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...
- vue踩坑记
vue踩坑记 易错点 语法好难啊qwq 不要把'data'写成'date' 在v-html/v-bind中使用vue变量时不需要加变量名 在非vue事件中使用vue中变量时需要加变量名 正确 < ...
随机推荐
- SpringMVC 前端传递list到后台
---恢复内容开始--- 1.前端获取传入后台的list 2.ajax写法: $.ajax({ type: 'post', url: url, async:false, dataType:" ...
- python排序算法之一:冒泡排序(及其优化)
相信冒泡排序已经被大家所熟知,今天看了一篇文章,大致是说在面试时end在了冒泡排序上,主要原因是不能给出冒泡排序的优化. 所以,今天就写一下python的冒泡排序算法,以及给出一个相应的优化.OK,前 ...
- python20个骚操作
Python小白需要知道的 20 个骚操作! Python 是一个解释型语言,可读性与易用性让它越来越热门.正如 Python 之禅中所述: 优美胜于丑陋,明了胜于晦涩. 在你的日常编码中,以下技巧可 ...
- CSS 导入-选择器-权重
CSS 导入-选择器 Cascading Style Sheets 层叠样式表 它用来控制网页样式,并允许将样式代码与网页内容分离的一种标记性语言 CSS语法结构 选择器 声明{} 属性名:属性值 c ...
- CMSdede后台登陆界面设计
1 在这里我就公布 css 和jq 也就是dede文件下templets的login.htm页面:代码如下 $(function () { $(".tex ...
- ajax规范写法
$.ajax({ url: "http://1.1.1.1/api/v2/user/inviters", //接口 type: "post", //GET或PO ...
- 2019-2020-1 20199304《Linux内核原理与分析》第六周作业
第五章 系统调用的三层机制(下) 1.往MenuOS中添加命令 (1)首先进入LinuxKernel文件夹,将menu目录删除.然后再git clone克隆下载更新了版本之后的menu目录(包含tim ...
- Web安全测试实战之测试HTTP方法
一. Http方法测试 有些Web服务器默认情况下开放了一些不必要的HTTP方法(如DELETE.PUT.TRACE.MOVE.COPY),这样就增加了受攻击面. 测试方法: 1.打开webscara ...
- “setTimeout、Promise、Async/Await 的区别”题目解析和扩展
解答这个题目之前,先回顾下JavaScript的事件循环(Event Loop). JavaScript的事件循环 事件循环(Event Loop):同步和异步任务分别进入不同的执行"场所& ...
- springboot-整合多数据源配置
简介 主要介绍两种整合方式,分别是 springboot+mybatis 使用分包方式整合,和 springboot+druid+mybatisplus 使用注解方式整合. 一.表结构 在本地新建两个 ...