当前位置: 首页 > news >正文

Java波动型数据预测_性能数据波动问题

最近项目在做性能测试的时候发现的一系列的数据波动的问题,下面记录下,以便以后查找。

压力测试跑了8个小时,结果数据从第5个小时开始悲剧,响应时间翻了一倍以上(原图找不到了,形状形同下图)

波动前后的数据都很稳定,查看日志发现在出现问题之后没有任何日志打出来,通过ls -sh查看各个日志文件的大小,发现其中一个日志文件208G,把整个home的空间占满了,在继续打日志的时候打不进去。把该日志删除后,重新跑压力测试,问题消失。

性能测试结果显示接口响应时间和预期的结果有很大的出入

首先排查测试使用的环境参数,没有问题。怀疑GC等影响,查看数据发现整个接口响应时间慢并不是因为数据波动导致的,而是一直都很慢,排除掉这个问题。通过visualvm直接连接到性能测试的jvm,查看接口情况。发现接口调用中的一步占用时间超过90%以上,定位到问题在这里。

通过对该方法的详细排查,发现内部有一个数据库调用,不过通常对于一个几万条的数据表进行索引查询也就几毫秒,不至于慢到这个程度。再详细查了一下,发现性能测试库没有建对应的索引,不过在测试环境和线上环境都是建好的。

所以,引起这个的原因是索引木有建,建上索引以后数据满足预期

合并主干后,重新进行性能测试,发现数据有周期性波动

每5分钟有一次大范围波动,排除了Full GC、线程池大小调整、cache过期、apache配置等问题,最后问题聚焦在新加的一个jvm监控上面,详细查找后发现果然有一个5分钟事件。

这里面会采集thread的数据,调用ThreadMXBean.dumpAllThreads(booleanlokcedMonitors, boolean lockedSysnchronizers)方法,传递的参数是ThreadMXBean.dumpAllThreads(true,true),需要遍历所有线程的Monitor和Synchronizer信息,导致所有的线程阻塞(正常情况下不会有这么明显的影响,性能测试的时候并发设的是30,每秒的请求数有几百个,所以影响会大一点)。把参数修改为ThreadMXBean.dumpAllThreads(false,false)即可解决。

相关文章:

  • java重构php_用于PHP代码重构的工具
  • java运行环境配置心得_java环境变量心得
  • chip-seq三个生物学重复样品处理——IDR
  • java绘制图形和文本一_java绘制图形和文本
  • CHIP-SEQ 芯片分析时,对于来自重复实验的数据,怎样进行MACS peaks calling 分析?
  • java end()用法_int regionEnd()
  • CHIP-seq 分析笔记
  • Java默认bigdecimal初始值_BigDecimal精度问题 and double基础类型默认小数位置问题
  • rna-seq分析流程 全套
  • java boxed_Java中的DoubleStream boxed()方法
  • FastQC原始安装
  • java getscheme_外部开启Activity新姿势(scheme)
  • 序列比对 hisat2
  • java 多线程 安全 源码_Java多线程理解:线程安全的集合对象
  • dir file list.file list.dirs
  • 0x05 Python数据分析,Anaconda八斩刀
  • android图片蒙层
  • CAP 一致性协议及应用解析
  • export和import的用法总结
  • go语言学习初探(一)
  • Java多态
  • Linux后台研发超实用命令总结
  • Octave 入门
  • SpriteKit 技巧之添加背景图片
  • 百度地图API标注+时间轴组件
  • 成为一名优秀的Developer的书单
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 手写双向链表LinkedList的几个常用功能
  • 详解移动APP与web APP的区别
  • 主流的CSS水平和垂直居中技术大全
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​MySQL主从复制一致性检测
  • ​虚拟化系列介绍(十)
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #数学建模# 线性规划问题的Matlab求解
  • (C语言)fgets与fputs函数详解
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (九)信息融合方式简介
  • (五)Python 垃圾回收机制
  • (一) storm的集群安装与配置
  • (一)WLAN定义和基本架构转
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)用.Net的File控件上传文件的解决方案
  • ... 是什么 ?... 有什么用处?
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net程序集学习心得
  • .Net多线程总结
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .Net组件程序设计之线程、并发管理(一)
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化