性能测试中过滤异常的响应时间
众所知周,及时排除了JVM尚未完全预热的因素以外,在所有请求中总有一些异常请求响应时间,今天分享一个案例:通过过滤测试刚开始时候的响应时间记录来提升整体数据的准确性。
优化来源于需求,本来FunTester测试框架不准备在本机统计上做优化的,因为现在公司的监控系统太强了,大部分需求的数据可以直接直观地从监控页面上实时得到。但是在最近一次JDK升级和各个GC以及参数的性能对比测试中,监控得到的数据都是网关和服务端统计的结果,跟实际的用户场景有一定差异,所以需要在发压端统计一下RT情况。 统计功能实现
响应时间均为 short 数组,对于单线程来讲存放在List costs 中,对于压测用例来讲,存放在Vector 中。所以只要写一个针对List<? extends Number> c 的统计方法即可。思路是排序然后去各个分位的值,如下: /** * 统计list各分位数据 * @param c * @return */ static FunIndex index(List<? extends Number> c) { if (c == null || c.size() == 0) return c.sort() int size = c.size() double min = c.first() double max = c.last() double p99 = c.get(size * 0.99 as Integer) double p999 = c.get(size * 0.999 as Integer) double p95 = c.get(size * 0.95 as Integer) double avg = SourceCode.changeStringToDouble(SourceCode.formatNumber(c.average(), "#.###")) def mid = c.get(size / 2 as Integer) new FunIndex(avg: avg, mid: mid, min: min, max: max, p99: p99, p999: p999, p95: p95) } /** * 统计结果 */ static class FunIndex extends AbstractBean { Double avg Double mid Double min Double max Double p99 Double p999 Double p95 @Override String toString() { "平均值:$avg ,最大值$max ,最小值:$min ,中位数:$mid p99:$p99 p95:$p95" } } FunTester框架改造
对于每个线程来讲,取消各自计算响应时间和直接往 List costs 存放数据,通知放到com.funtester.base.constaint.ThreadBase 中方法统一实现。
代码如下: /** * 是否记录响应时间,默认否 */ public static boolean COUNT = false; /** * 记录响应时间 * * @param s 开始时间 */ public void count(long s) { if (COUNT && executeNum > 100) costs.add((short) (Time.getTimeStamp() - s)); }
PS:后续会更新一个RT取样器实现,也是通过这个思路完成的。
这样一来,既可以过滤每个线程最开始的100个请求数据,也可以减少性能测试中本地代码执行量。
下面分享一下线程模型的改造后的 com.funtester.base.constaint.FixedThread#run 方法内容: @Override public void run() { try { before(); long ss = Time.getTimeStamp(); while (true) { try { executeNum++; long s = Time.getTimeStamp(); doing(); count(s); } catch (Exception e) { logger.warn("执行任务失败!", e); errorNum++; } finally { if ((isTimesMode ? executeNum >= limit : (Time.getTimeStamp() - ss) >= limit) || ThreadBase.needAbort() || status()) break; } } long ee = Time.getTimeStamp(); if ((ee - ss) / 1000 > RUNUP_TIME + 3)//区分软启动运行和正式运行 logger.info("线程:{},执行次数:{},错误次数: {},总耗时:{} s", threadName, executeNum, errorNum, (ee - ss) / 1000.0); Concurrent.allTimes.addAll(costs); Concurrent.requestMark.addAll(marks); } catch (Exception e) { logger.warn("执行任务失败!", e); } finally { after(); } }
沿着这个思路,再加上动态模型之动态增减【FunTester测试框架】相同的思路,我计划拓展一个 RT取样器实现 也会使用异步线程完成,敬请期待。 Have Fun ~ Tester !
安卓的数字钱包可显示驾驶执照信息各国政府一直在探索数字驾驶执照,但现有方法存在很多缺陷。驾驶员通常必须依赖专有应用程序,有的应用程序安全性上甚至存在隐患。驾照也要电子化(图片来源engadget)而且要是手机在打
转机!德国称将不想将华为排除5G网络建设德国经济部长阿特麦尔(PeterAltmaier)今天指出,德国不想禁止中国电信设备制造商华为替德国建造5G网络,表示柏林将对所有卖方更加严格规定安全标准。路透社报导,阿特麦尔在德
企业应用快速跨向容器时代的正确姿势戳蓝字CSDN云计算关注我们哦!编者按1月18日,网易云首席解决方案架构师刘超在微信群带来了主题为企业应用快速跨向容器时代的正确姿势的线上讲座,顺接上个月云计算的前世今生,为大家进
2019年中国互联网就业洞察白皮书核心摘要2018年,互联网人才的薪酬变化随着公司融资轮次的增长而增长,D轮及以上公司为人才所付的薪酬达到了每个月1。5万。同时,互联网企业招聘互联网人才看重的核心因素除了专业技能之
MIUI官微晚上八点见难道是MIUI11要来?开年以来,小米新机发布节奏颇快,看起来,软件方面也要马不停碲地追赶了。3月20日下午,MIUI官方微博预热晚上八点见,截止发稿,关于MIUI11的评论被顶在最前。事实上,距离去年5
太省电了!英伟达发布的这款电脑功耗仅5WPConline资讯近日,显卡大厂NVIDIA在美国硅谷召开GTC2019演讲,会上CEO老黄发布了一款机器人开发者工具箱JetsonNano,该机机身长宽只有69。6x45mm,
KaiOS势头迅猛引谷歌眼红,安卓或将进军功能机市场最近两年手机操作系统里面KaiOS发展之势迅猛。但是如果你甚至都没听说过那也很正常,因为它的市场是在功能机上。KaiOS是一个基于Linux的移动操作系统,目标是将智能手机的强大与
量子通信安全性讨论升级,中科大摆下擂台窃取密钥者奖百万在理论上绝对安全的量子通信惊现破绽?一篇研究量子通信攻防的论文引发广泛讨论,中科大量子通信团队迅速做出了多重回应,从学理讨论升级到实战演练。先有中科大量子通信领军人物潘建伟院士等5
2018全球仪器公司榜单出炉仪器仪表已形成庞大市场规模3月4日,CampEN杂志公布了2018年度全球仪器公司TOP20排位名单。CampEN跟踪的20家公司的整体仪器销售额增长了6。2,其中,前五大仪器制造商占去年前20家公司销售额
深圳有哪些知名企业?深圳的发展是一个奇迹,有谁会想到,当初一个默默无闻的小渔村,伴随着改革开放成为我国的第一个经济特区,如今已经发展成为我国的四个一线城市之一,中国的科创之都?2018年GaWC组织把
Redmi首款真无线蓝牙耳机RedmiAirDots,售价99。9元!刚刚在Redmi春季新品发布会上,除了期待已久的RedmiNote7Pro和Redmi7手机外,Redmi还带来了一款真无线蓝牙耳机RedmiAirDots。RedmiAirDot