jimdb压测踩坑记

摘要:
本文记录了Jimdb压力测试过程中遇到的各种小坑,希望引起更多关注。当前jimdb调整参数被认为是合理的。不要在Jimdb分区挂起后更换它,因为它被认为是性能问题。由于在添加新分区后,连接数被清除,因此再次开始压力测试。因为压力不是很高,所以看起来很正常。然而,在这种情况下,这是非常不正常的。Docker集群很可能会重启,然后压力测试仍然会挂断。

本文记录在jimdb压测过程中遇到的各种小坑,望能够抛砖引玉。

1.压测流量起来后,过了5分钟左右,发现ops突降,大概降了三分之一,然后稳定了下来

大概原因:此种情况,jimdb极有可能某个分片的连接数打满,从而导致分片的cpu达到100%。

调优方案:首先,默认分片连接数为1w,此时可以根据自己的需求,如果自己的docker数量很少,可以调整成2w,反之则3w。

                  然后,看程序中的操作,是不是有pipeline或者mget等操作,如果有,且程序日志中输出了大量的can't get jedis connection from jedis pool,则调整如下线程池,直至找到比较合适的值:

                image

                 如果程序中普通的redis命令操作比较多,则可以调整如下参数,注意maxIdelPerKey不要超过64,否则无效,MaxTotalPerKey太大会造成连接数过多,太少会造成频繁连接,需要根据具体压测情况设置合适的值:

               image

                另外,连接的超时时间等不可设置过长,建议设置如下:

              image

上面参数的调整,需要压测十几次甚至几十次,才能慢慢的调整出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压测踩坑记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Raspberry PI 树莓派 远程登录 和 远程桌面android 开发 实现一个自定义布局的AlertDialog对话框下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker实现运行tomcat并部署项目war包,并实现挂载目录

之前写的有点乱,现在再来整理一下docker的简单部署运行 借鉴博客:https://blog.csdn.net/qq_32351227/article/details/78673591 一、docker的安装,以及配置开机自启docker服务就不说了,网上一大把,我也做了另一篇博客笔记 #。。。 二、docker下载tomcat镜像并运行   2.1:搜...

.Net Core微服务入门全纪录(一)——项目搭建

Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章。 前言 写这篇博客主要目的是记录一下自己的学习过程,只能是简单入门级别的,因为水平有限就写到哪算哪吧,写的不对之处欢迎指正。 代码放在:https://github.com/xiajingren/NetCoreMicroserviceDemo 什么是微服务? 关于微服务的概念解释网上有很多......

Django项目的docker镜像制作

最近搞了个django项目,在各个环境部署时总会遇到问题,于是便想到了docker部署,接下来记录一下一下docker镜像制作部署的流程。 基础镜像:镜像中运行的项目或者启动的一些服务,都要在一个基础镜像之上才能运行这些服务,比如一个django项目或者mysql数据库等,都要在Linux操作系统之上来运行,所以打包我们自己的项目时,必须要有个基础镜像来当...

docker安装nessus

记录一下昨天刚装好的docker安装nessus的过程 一开始,我不知道在哪个环境下安装,由于虚拟机真的看起来不好用,特别是之前的命令没法查看,也就是没法上滑鼠标,dockerhub也不太明白咋用的,有点迷,最后我在powershell下执行了,用起来瞬间舒服多了 docker version查看安装版本,说明安装成功 成功之后就想办法安装nessus,网...

Docker学习—DockerFile

前言:  上一篇文章简单使用了docker 拉取镜像、启动容器、编译镜像;其中编译镜像时,使用到了Dockerfile,那么接下来我们就详细的来说说Dockerfile DockerFile是什么:   Dockerfile 是一个用来构建镜像的文本文件,Dockerfile内容中包含了一条条构建镜像所需的指令和说明。最终采用docker build 命令...

docker 安装jira

下载镜像 docker pull cptactionhank/atlassian-jira-software:8.1.0 创建对应映射文件夹 mkdir /data/app/jira \mkdir /data/app/jira/localtime 运行 docker run -d -p 8080:8080 --name jira-software -v /...