首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

性能测试中Disruptor框架shutdown失效的问题分享

在基于Disruptor开发新的性能测试QPS模型时候,中间遇到了很多问题,踩了很多坑。今天就分享一个比较典型的问题:shutdown失效。...问题在于这么优秀的一个框架,怎么可能会存在这么明显的BUG? 经过查阅资料,还真特么存在,只不过在极少数使用场景下会发生,刚好FunTester性能测试框架设计中就属于这个场景。下面听说娓娓道来。...下面是两个因此带来的设定: Disruptor框架的消费者线程或者消费者线程数组数需要在Disruptor启动之前设定,也无法修改 由于性能测试需要FunTester性能框架中基于Disruptor写的...,甚至未启动状态 以上是四个因为Disruptor框架特性和FunTester框架设计带来的难以避免,然后就会在线程数远超(难以量化界定)需求的时候,会导致性能测试结束之后,Disruptor执行shutdown...关于较多消费者时,Disruptor框架shutdown失效的问题已经反馈给了开发者。下面是我的测试脚本,为了更容易验证,我特意写了Java版本的。

50430

性能测试中的环境问题

理由1:计算机的硬件配置,性能变化并不是线性的,由于工艺的问题,以前所有的性能问题都可以归结为IO问题,但现在不一定了,固态硬盘的出现,基本上让CPU、内存、硬盘的读写速率处于同一水平线,如何使用这些资源取决于你的代码调用方式...并不是,本质上,在测试环境做性能测试,更多的是为了验证和解决系统的单点性能问题,排查整体的性能表现下限在哪里。...最后,通过测试环境的性能测试,我们可以做好预防方案,知道哪些组件性能较差,那么就可以针对性地做重点监控,以便及时发现问题并启动预案,而不是被动地等待性能问题出现。...综上,性能测试是个系统工程,不能期待通过简单的数据换算就能得到一个定值,因为影响系统性能的因素太多,我们需要通过性能测试环境发现和解决系统中的基础性能问题,使它达到可用的状态,然后在线上通过合理的监控和预警...可能很多人会提到线上全链路性能压测,可以非常有效地评估系统的性能表现。或者直接在夜深人静的时候,直接压生产环境,验证性能问题。

15320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Rafy 领域实体框架设计 - 重构 ORM 中的 Sql 生成

    前言 Rafy 领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了 ORM 的功能。...与其说是重构,不如说重写,因为 90% Lite ORM 的类库都已经不再使用。但是又不得不面对对历史代码中接口的兼容性问题。接下来,将说明本次重构中的关键技术点。...旧代码讲解 最初采用的 Lite ORM 是一个轻量级的 ORM 框架,采用在实体对象上标记特性(Attribute)来声明实体的元数据,并使用链式接口来作为查询接口以方便开发人员使用。...EntityQuery 层中的类型实现了 IQuery 中对应的接口,并使用领域实体的相关 API 来实现从实体到表、实体属性到列的转换。...重构的同时,我们为能想到的场景都编写了测试用例: 目前,框架版本也升级到了 2.23.2155。 有兴趣的同学,了解、下载最新的框架,请参考:《Rafy 领域实体框架发布!》。

    2.1K70

    性能测试中的随机数性能问题探索

    在软件测试中,经常会遇到随机数。我简单分成了两类: 简单取随机数; 从一个集合中随机取值。 其实第二个场景包含在第一个场景内。...对于接口测试来说,通常我们直接使用第二种场景比较多,就是从某一个集合中随机取一个值。如果更复杂一些,每个值拥有不同的权重,其中这个也可以转化成第二个场景来说。...缘起 为什么要把第二个场景和第一个场景分开呢,这个问题源于之前写过的文章ConcurrentHashMap性能测试,当时发现自己封装的com.funtester.frame.SourceCode#random...所以我就搜索了一些高性能随机数的功能,跟我之前搜到的资料一致,使用java.util.concurrent.ThreadLocalRandom这个实现类是性能最高的,方法如下: /**...,这个问题略微有点深奥,暂时没有思路。

    71220

    EF实体中的修改

    不推荐方式一: 思路:先从ObjectContext取出实体,然后将前台传过来的DTO属性对应赋值到我们的实体上,然后调用ObjectContext的保证修改方法。...但是这种方式是最不提倡的,因为这样每次修改前都得先将数据查出来,经过SqlProfiler追踪,这么一个操作要对数据库进行两次的连接。这是不可忍受的!...推荐方式二: 思路:无需先查出实体,因为我们知道EF通过ObjectStateManage来控制添加、修改、删除队列以及实体的状态,我们所有可以通过在直接将DTO转化成实体,然后将实体对应的队列中,并...且我们手动的将实体的状态处理好,再调用ObjectContext的保证修改方法,这样就避免了先查询后修改,两次数据库连接的问题了。...schoolDB.Student.Attach(student); //手动修改实体的状态 schoolDB.ObjectStateManager.ChangeObjectState(student

    1.1K10

    解决Ceph集群中的故障和性能问题

    解决Ceph集群中的故障问题当Ceph集群遇到OSD故障时,我们可以采取以下步骤快速诊断问题并进行修复:检查Ceph集群状态:使用ceph -s命令检查集群状态,查看是否有OSD出现故障。...如果有OSD出现故障,会显示在集群状态中。查看OSD状态:使用ceph osd tree命令查看OSD的状态,包括OSD的ID、主机名、状态等信息。确定故障的OSD所在的节点。...请根据具体情况选择合适的监控工具,并进行配置和启动。监控性能指标:使用监控工具监控Ceph集群的性能指标,如吞吐量、IOPS、延迟等。可以查看集群总体的性能指标,也可以查看每个OSD的性能指标。...性能调优:根据监控得到的性能指标,可以进行性能调优。例如,根据瓶颈指标进行负载均衡,调整PG数量和大小,调整OSD的权重等。容量规划:根据监控得到的容量使用情况,可以进行容量规划。...应对Ceph集群中的网络延迟和带宽瓶颈问题当Ceph集群中出现网络延迟和带宽瓶颈问题时,可以采取以下措施应对:检查网络配置:确保Ceph集群的网络配置正确,包括网络拓扑、网卡参数、链路带宽等。

    85021

    性能测试中Disruptor框架ExceptionHandler使用分享

    在使用Disruptor设计新的性能测试模型的过程中,在使用过程中,偶然发现会有一些异常,然后QPS就会不断下降,直到最后QPS能力降为零。...这个接口实现类是处理消费消息的过程中发生的异常,具体的源码位置在com.lmax.disruptor.WorkProcessor#run,有兴趣的可以看看。...回到实际场景,使用消费线程进行并发请求,在之前的实现中都是直接抛出异常,导致BUG的出现。...try{ dosomething() catth(e){ } 因为随着QPS上升,报错的概率还是挺大的,毕竟是日志流量回放,由于流量文件中部分请求直接回放是会失败的。...如果打印日志,即使每秒万分之一的概率,每秒错误QPS就得10+的QPS。不如直接使用专用的日志平台去统计这部分的异常日志。

    63730

    JPA实体类中的注解

    @Entity   标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类 @Table   标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相对应...@Id @Id设置对象表示符,标识的实体类的属性映射对应表中的主键 @GeneratedValue 设置标识符的生成策略,常与@Id一起使用  参数:strategy指定具体的生成策略  方式一:@...通常ORM框架可以根据属性类型自动判断数据库中字段的类型,但是对于Date类型仍无法确定数据库中字段类型究竟是DATE,TIME还是TIMESTAMP。...该属性通常不必指定,ORM框架根据属性类型自动判断targetEntity。 @OneToMany 描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段。 ....多对多关联上是两个一对多关联,但是在ManyToMany描述中,中间表是由ORM框架自动处理  可选  targetEntity:表示多对多关联的另一个实体类的全名,例如:package.Book.class

    3.9K70

    搭建cloud框架中遇到的问题(记录篇)

    ,获取的数据不要放在session中,放在缓存或数据源中并且要开放拦截,道理跟上边一样,你实际客户端的认证对于网关转发请求是不认的,他认为你是另一客户端。...,这次我使用了where和if的标签,所以必须使用param给定义参数才可以在xml的标签里使用 2020年03月05日 10:45(客户端与服务端的session问题+redis时间设置问题)...之前说了客户端与服务端的token数据是存在session中的,尽管我放开了拦截,但是我们的token是要经过转发到子系统使用的,子系统的开发人员跟我沟通发现在他登陆后进入子系统根据获取到的token通过...,之前说过session的绑定是通过客户端的sessionId的,所以客户端信息发生改变服务端找不到信息返回了null,之前也是临时测试放到session中,这次正好放到redis里。...,我在存储redis的时候没有问题,但是在用户根据token取信息的时候一直是null,我断点检查问题,发现传递token跟redis的key不符合,下面是我生成token的代码,示例为Nv6RRuGEVvmGjB

    24080

    Python的Scrapy框架使用中的诸多问题

    一、爬取的数据,在管道中,存入EXCEL 1.1 安装命令: pip install openpyxl 1.2 在pipelines.py中,进行如下操作: from openpyxl import...()0在没有值时,会出问题;extract_first()则可以很好地解决这个问题,没有值则赋值None(代码如上和下方) item['teacher'] = node.xpath("..../p/text()").extract()[0] 三、MongoDB的使用 3.1 为什么使用MongoDB (1) MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。...3.2 MongoDB安装过程中遇到的问题 (1)下载安装教程地址:[https://www.runoob.com/mongodb/mongodb-window-install.html]...(https://www.runoob.com/mongodb/mongodb-window-install.html) (2)安装中的问题:1.下一步安装**"install mongoDB

    1.5K00

    选择块参照中嵌套的实体

    在利用ObjectARX进行CAD二次开发时,如何选择块参照中嵌套的实体,并进行进行下一步操作?这个问题的难点是:如何判断用户选中的实体到底是块参照里面的非嵌套对象实体?...还是块参照中嵌套的块参照的实体?本文利用全局函数acedNEnsSelP解决了这个问题,并可实现:如果用户选择块参照中嵌套的实体,直接视为用户选择了这个嵌套的块参照,效果如图。...一、全局函数acedNEntSelP介绍 为了选中块参照中的实体,ObjectARX提供了一个接口: int acedNEntSelP( const ACHAR * str, ads_name...ptres, int pickflag, ads_matrix xformres, struct resbuf ** refstkres ); const ACHAR * str:在选择块参照中实体时的提示语...ads_matrix xformres:该4×4变换矩阵可以将实体的任意ECS坐标转换为WCS坐标。如果选择的实体不是嵌套实体,该值设为单位矩阵。

    26531

    Rafy 框架 - 实体支持只更新部分变更的字段

    Rafy 快一两年没有大的更新了。并不是这个框架没人维护了。相反,主要是因为自己的项目、以及公司在使用的项目,都已经比较稳定了,也没有新的功能添加。...但是最近因为外面使用了 Rafy 的几个公司,找到我,提出了一些明确的需求,期望我做一些相应的升级。所以可能最近几个月,会陆续更新 Rafy 框架。...最近升级后,可能截止到明年,会陆续支持 NET5-6 上的一些功能。 今天这篇博客,主要是记录了一个客户提出了多次的需求:实体更新时,只更新改动的字段。...Rafy 框架会管理好领域框架的状态变更。事实上,这几年确实没有升级,而开发者也用得很好,很少有人关注。...但是这次客户提出意见,由于他们的实体类中的属性实在太多了,查看日志中的更新语句时,较难定位具体已经修改的属性。再加之,Rafy 接下来会添加一个只查询部分实体属性的功能。所以就一并完成了。

    1.2K10

    PDF.NET数据开发框架实体类操作实例(for PostgreSQL,并且解决自增问题) PDF.NET数据开发框架实体类操作实例(MySQL)

    本篇是 PDF.NET数据开发框架实体类操作实例(MySQL) 的姊妹篇,两者使用了同一个测试程序,不同的只是使用的类库和数据库不同,下面说说具体的使用过程。...注:在PDF.NET SOD框架 5.6.0.1121 之后,框架取消了这一个限制,你仍然可以像在其它数据库中那样使用PostgreSQL的自增列,实体类无需做任何更改。...3,根据这个实体类,我们去PostgreSQL定义一个用户表:tb_user,具体过程省略,注意字段“ID”仍然使用自增列(在PostgreSQL中是 serial 类型,但编辑表类型的时候,发现字段是整数类型...            db.InsertKey = "User_ID_seq"; 在PostgreSQL中,不同的表需要设置不同的 InsertKey ,而在SQLSERVER等数据库中,始终采用...不过原理上跟以前是一样的,只不过框架自动处理了这个问题,前提是你必须使用SOD自带的处理自增的方式,自动创建表。

    1.6K60

    性能测试框架中QPS取样器实现

    在以往的性能测试中,我一般都是先将测试数据保存,然后等测试完成之后再进行数据统计和出图展示,既减少了用例运行时资源消耗,也能对测试数据进行二次分析。...但这种模式下无法对测试过程进行监控,有时候运行用例的时候,会有长达数分钟的真空期。有点难熬,所以前段时间增加了一个性能测试中异步展示测试进度的功能。...在某次思考人生的时候突然从JMeter取样器sampler得到了灵感,我要是也能实时获取当前系统的QPS处理能力的数据的话,既可以提前预估到本次测试结果QPS的数值,也能观察到QPS在整个过程中变化的曲线...说干就干,本来想重新写一个异步类来完成这个功能,但是写完发现功能和之前写过的进度条功能类重合度太高了,最终决定把功能整合在一个类中,在检测进度条的时候也输出当前系统QPS。...import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** * 用于异步展示性能测试进度的多线程类

    47020

    flask框架中的一些常见问题

    前一段flask框架的一个小项目虽然写完了,但是里面有些知识,或遗忘或用的稀里糊涂.对于其中涉及到的一些知识点掌握的并不是很透彻,因此在写笔记的时候表述的也不是清晰,今天就来一次大盘点,让我们彻底弄懂这些问题...它是一个关系型数据库框架,使用的时候,舍弃了一些性能开销的同时,换来的是开发效率的大大提升。...session与cookie是一对共存的概念,我们的HTTP默认是无响应的,因为使用了socket套接字,每一次请求完毕之后都会关闭,这样就有一个问题,那就是每次都是全新的访问,大大降低了体验。...在psot请求时,form表单或ajax里添加csrf_token(实际项目代码里就是如此简单) 解决原理: 添加csrf_token值后,web框架会在响应中自动帮我们生成cookie信息,返回给浏览器...优质文章推荐: 公众号使用指南 redis操作命令总结 前端中那些让你头疼的英文单词 Flask框架重点知识总结回顾 项目重点知识点详解 难点理解&面试题问答

    1.2K30

    实体列表缓存(最土的方法实现百万级性能)

    开源地址:https://github.com/NewLifeX/X (求star, 765+) 全表缓存 在实际项目开发中,经常遇到有一些表数据很少(1000行以内),不会频繁修改(平均每行几个小时才会修改一次...根据查询日志可以看到,虽然执行了1000万次查询,实际上只有一行select日志输出,也就是只查了一次数据库,其它9,999,999次从缓存中查找。...缓存过期后,开异步线程更新并同时返回旧数据,确保应用层性能。设置文件的 EntityCacheExpire, 默认10秒 添删改过期。...对实体类的添删改操作完成后,都会直接修改实体缓存对应项,而不会清空整个列表。 显然,首次加载以后,将来访问的永远是定时更新的缓存数据,应用层可以得到非常好的性能!...早期版本XCode实体缓存默认过期时间60秒,随着数据库性能提升,默认值修改为10秒,可根据实际场景设置。

    83410

    MongoDB中null性能问题以及如何应对

    【背景】 在使用ORACLE、MYSQL以及MongoDB数据库时,其中查询时经常遇到NULL的性能问题,例如Oracle的索引中不记录全是NULL的记录,MongoDB中默认索引中会记录全是...null的文档,MongoDB查询等于null时,表示索引字段对应值是null同时还包括字段不存在的文档.因为MongoDB是动态模式,允许每一行的字段都不一样,例如记录1中包括包括字段A等于1,记录2...包括字段A等于null,记录3不包括字段A,那么索引中不仅会包括A等于null的文档,同时也记录不包括A字段的文档,同样会赋予null值(空数组属于特殊的).正是由于这些设计规则不同,难免在使用过程中就会遇到各种性能问题...备注:当前是基于4.4 版本来验证与测试.同时在集合xiaoxu上fld4字段存在正常索引{a:1},包括用到5.0以及6.0版本来解决性能问题(安装与升级不在本次中).另外索引不是multikey....--这个是我们的机会. 3、如何进行优化 如遇到上面的性能问题,5.0也无法解决,考虑如下2个思路: 1、能否继续升级到6.0版本--对于生产环境需要从多个角度进行考虑.这里只是验证能否解决性能问题

    2.5K10
    领券