【性能测试】常见的性能问题分析思路(二)案例&技巧
上一篇介绍了性能问题分析的诊断的基本过程,还没看过的可以先看下【性能测试】常见的性能问题分析思路-道与术,精炼总结下来就是,当遇到性能问题的时候,首先分析现场,然后根据现象去查找对应的可能原因,在通过对应的方法和工具去定位问题。
本篇来给出个具体实际工作中的案例,以及会简单说一下一种性能分析工具的使用技巧,加深这方面的认知和学习。
案例分析
背景
对某个项目(内部项目脱敏)进行压测的时候出现了内存泄漏的问题,经过发现问题-分析现象和过程-定位问题,排查出根因是定时任务引发的内存泄漏,因此把整个分析过程分享出来,做个类型性能缺陷的参考,也作为分析过程的一个实际操作案例。
问题现象
计税某接口/finance-xxxxx-center/xxxxx/incomeCalculate接口,压测过程中,通过监控发现,服务器的CPU每隔一段时间有规律波动,内存由60%上涨至85%,更奇怪的是当停止压测后,CPU依旧有规律的尖刺波动,服务器内存占用率一直居高在85%没有回收。

分析过程
从上述CPU占用图上看,一开始的思路是以为MQ消息消费导致的,去阿里云观察MQ消费情况。

从两个方面验证:第一让研发去review代码,是不是有定时任务在执行检查执行频率,第二,我通过打印CPU尖刺时间段线程dump,查看尖刺时CPU占用的线程,定位到引起CPU尖刺的就是定时任务线程和GC回收线程。



到这里之后还有一个点需要分析,那就是服务器的内存为什么会持续上升?上升之后为什么没回收?需要确认内存这个现象是不是导致CPU尖刺的定时任务引起。


首先,去应用服务器上看了GC情况,发现没有尖刺的时候YGC几乎没有,但是当CPU尖刺时间段,就有频繁的YGC,除了单次GC时间730ms不正常,其他的算正常。
所以需要进一步找内存上涨,内存不释放原因。
打印压测停止后存活对象的内存堆dump,通过mat工具分析。

从工具上看有三处疑似内存泄漏,主要关注suspect1,通过GCroot分析。

进一步确认是quartz引起的 对象不释放。
接下来,我们验证猜想,定时任务5分钟执行一次,而且执行完一次可能不只5分钟。
分两步走,第一去看服务器日志,当出现CPU尖刺的时候,观察job跑批的时间,发现单次job启动后,由于数据量大,在5分钟之内无法跑完,日志一直刷,出现任务浪打浪现象

到这里基本可以确定是定时任务造成的,那个数量是太大了,一次性捞出来的数据太多导致5分钟之内执行不完任务,然后5分钟后job又重新启动,形成job日志一直在刷,然后对象的引用无法清除,导致大对象占用内存不能释放。
接下来我们在通过再次压测验证,修改定时任务频率为1个小时,重启服务器,继续压测计税接口,发现CPU没有尖刺出现,内存也没有明显上升,然后把定时任务频率再改回5分钟,发现跑任务的时候,内存又继续上去了,而且一直维持在85%的高位,到此验证完毕。
ARTHAS
本工具是阿里开源的Java诊断工具,很多研发和性能分析同学使用,是一把通过探测系统深度问题的利器。由于本篇不是讲解此工具,安装,使用的就略了,敢兴趣的参考Arthas(阿尔萨斯)吧[参考-1],这里给一些交互截图和在性能测试问题分享一些使用技巧
如了解系统状态信息

如查看Profiler/FlameGraph/火焰图

性能分析案例一些使用方法技巧
先用thread -n 10 找出线程堆栈中程序运行的类与方法
Thread –b 检测是否有线程锁
接着sc -d com.poizon.infr.user.core.service.util.HttpUtil.doHttpPost,查找类
然后 sm -d com.poizon.infr.user.core.service.util.HttpUtil包下的方法
再然后trace com.poizon.infr.user.core.service.util.HttpUtil doHttpPost '#cost > 10'方法耗时
trace com.poizon.infr.user.core.service.controller.UnionLoginController unionLogin '#cost > 50' -n 3
jad --source-only com.poizon.infr.user.core.service.util.HttpUtil.doHttpPost ,反编译出怀疑的源代码进行分析
profiler -e cpu -d 300 --format svg start 火焰图
【注解&参考】
[参考-1] https://arthas.aliyun.com/doc/
原稿分享:禧子
优化编辑:大奇
【性能测试】常见的性能问题分析思路(二)案例&技巧的更多相关文章
- TVM性能评估分析(二)
TVM性能评估分析(二) Figure 1. A bird's eye view of the µTVM + AutoTVM infrastructure Figure 2. A standard ...
- jmeter性能测试重要指标以及性能结果分析
一.Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告 如果大家都是做Web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Re ...
- 性能测试——记XX银行保全项目性能问题分析优化
记XX银行保全项目性能问题分析优化 数据库问题也许是大部分性能问题的关注点,但是JAVA应用与数据库交互的关节,JDBC 就像是我们人体的上半身跟下半身的腰椎,支持上半身,协调下半身运动的重要支撑点. ...
- Linux性能监控分析命令(二)—sar命令介绍
性能监控分析的命令包括如下: 1.vmstat 2.sar 3.iostat 4.top 5.free 6.uptime 7.netstat 8.ps 9.strace 10.lsof ======= ...
- 【转】postgreSQL之autovacuum性能问题分析(二)
如上篇文章提到,如果出现了autovacuum的问题,那么这可能是个悲伤的故事.怎么解决? 笔者觉得可以从如下几个方面着手去考虑解决问题,可以避免一些坑.1) 持续观察,是不是autovacuum问题 ...
- Android App性能评测分析-流畅度篇
1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...
- Java应用性能瓶颈分析思路
1 问题描述 因产品架构的复杂性,可能会导致性能问题的因素有很多.根据部署架构,大致的可以分为应用端瓶颈.数据库端瓶颈.环境瓶颈三大类.可以根据瓶颈的不同部位,选择相应的跟踪工具进行跟踪分析. 应用层 ...
- list 、set 、map 粗浅性能对比分析
list .set .map 粗浅性能对比分析 不知道有多少同学和我一样,工作五年了还没有仔细看过list.set的源码,一直停留在老师教导的:"LinkedList插入性能比Array ...
- enode框架step by step之框架要实现的目标的分析思路剖析1
enode框架step by step之框架要实现的目标的分析思路剖析1 enode框架系列step by step文章系列索引: 分享一个基于DDD以及事件驱动架构(EDA)的应用开发框架enode ...
随机推荐
- mac的vssh用sftp连不上,报unexpected SSH2_MSG_UNIMPLEMENTED packet
- whistle抓包-数据包分析
额,这篇忘了是来自哪位作者的了. whistle:1.14.6 这里以抓取浏览器数据包为例,分析抓取的数据. Method:Connect,对应Host:Tunnel to意思是因为网络环境受限,客户 ...
- [转载]linux上用PHP读取WORD文档
在linux上用PHP读取WORD文档,其实是使用了 antiword程序把word文档转化为txt文档. 再使用php执行系统命令调用而已. 具体操作如下: 1.安装antiword 官方站:htt ...
- abp 以或的方式验证多个 AuthorizeAttribute
前言 在使用 abp 开发业务功能时,会遇到公用同一个类的情况,在给这个类配置权限时,就要添加多个 AuthorizeAttribute,类似下面这样: [Authorize(DcsPermissio ...
- 树莓派使用python+继电器控制220V灯泡
需要的材料 1.继电器:继电器是一种电控制器件,它实际上是用小电流去控制大电流运作的一种"自动开关",我们这里用它来控制电灯.控制了继电器就等于控制了电灯. 我购买的是某宝上3块钱 ...
- 踩坑系列《十一》完美解决阿里云vod视频点播无法播放音频和视频点播控制台里的媒资库里面的视频无法播放
刚开始项目部署的时候,音频还是正常播放,后面直接报了 获取m3u8文件失败(manifestLoadError) 的错误,原因是 我的域名 xxx.com 这个域名没有解析到点播提供的CNAME上,所 ...
- 2021年3月-第02阶段-前端基础-HTML+CSS阶段-Day02
HTML5 第二天 一.rotate 2d旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转 使用步骤: 给元素添加转换属性 transform 属性值为 rotate(角度) 如 transfor ...
- Oil Deposits 新年特辑篇
链接:E - Oil Deposits 题目: The GeoSurvComp geologic survey company is responsible for detecting undergr ...
- Java(18)抽象类
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201625.html 博客主页:https://www.cnblogs.com/testero ...
- docker初探和基础搭建
个人博客 docker中文手册 Docker 是什么? docker是一个开源的软件部署解决方案: docker也是轻量级的应用容器框架: docker可以打包.发布.运行任何的应用. 在我的粗浅理解 ...