36-电子发票查询接口-TPS波动较大-典型的性能问题-内存溢出
来源:互联网 发布:校音器软件下载 编辑:程序博客网 时间:2024/04/28 12:21
2 电子发票查询接口TPS波动较大
2.1 问题描述
电子发票查询接口,2000Vuser并发下,TPS波动较大并且在2分钟后直降为0。如下图:
2.2 定位思路
2.2.1 步骤一:典型的内存溢出
Jconsole工具查看内存回收情况。发现老生代,在短短的10分钟左右时间内存,FGC长达3分钟。一般情况下,1小时稳定测试中,FGC时间不会超过3分钟。
2.2.2 步骤二:查看GC情况
查看GC情况:jstat -gc 30129 5000 ,主要关注FGCT(FGC的总时间)和FGC(FGC的次数)。FGC为FullGC的次数,由下图可知,FullGC的次数不断增加。
2.2.3 步骤三:DUMP出内存快照
jmap -dump:live,file=1865.map 1865,DUMP出内存中存活的对象。
MemoryAnalyzer工具,分析DUMP出来的内存快照。发现如下图红框中,有1个多G的Session对象存活在内存中。导致的内存老生代的溢出。
2.3 解决办法
当前测试的这个电子发票查询接口,用户通过订单号,查询发票详情,也就是PDF文件。当2000Vuser并发时,TPS约为7000左右。也就是有百万级的Session存活在内存中。导致内存溢出。
解决办法是:请求成功之后,会立即跳转pdf页面,在那将session失效,这里就不受session失效时间控制了。
session.invalidate这一步会在请求成功后的下一步进行操作的。相关代码:
通过分析,是因为高并发的场景下session过多导致内存溢出。发现tomcat的1分钟失效时间并不足够;
解决方法: 对于我们发票查询系统,查完下载pdf之后,session就无作用,就可以立即释放session
我们在预览pdf之后,立即执行session.invalidate()将session立即失效。这样可解决内存溢出问题,最终tps稳定在4000左右.
2.4 最终TPS
2.5 优化后的JVM内存回收情况
- 36-电子发票查询接口-TPS波动较大-典型的性能问题-内存溢出
- 外销升级接口V2.1.3TPS波动较大-基于索引的sql优化
- 性能测试JMeter趟的坑之JMeter的bug:TPS周期性波动问题
- 发票查询接口的调用
- 网站性能测试PV到TPS的转换以及TPS的波动
- 网站性能测试PV到TPS的转换以及TPS的波动
- 网站性能测试PV到TPS的转换以及TPS的波动
- 网站性能测试PV到TPS的转换以及TPS的波动
- 电子发票税费计算问题
- 性能数据波动问题
- 可以读取较大的图片而不会内存溢出了
- 加载较大的本地文件作为背景图时 防止内存溢出
- 性能测试学习之三—— PV->TPS转换模型&TPS波动模型
- 通过接口获取大量数据,内存溢出的问题
- TPS波动模型
- 内存溢出的问题
- 典型的内存分配问题
- PHPExcel导出数据量较大时内存溢出
- 模拟法简单实现螺旋矩阵
- 最长回文串的几种做法
- 博客园 - CSDN-markdown语法之怎样使用LaTeX语法编写数学公式
- Leetcode (312) Burst Balloons
- 【工控机开发】linux下错误的捕获:errno和strerror的使用
- 36-电子发票查询接口-TPS波动较大-典型的性能问题-内存溢出
- mysql复合索引、普通索引总结
- 华为OJ——人民币转换
- iOS崩溃调试
- Effective Modern C++ 条款35 比起基于线程编程,更偏爱基于任务编程
- linux下使用FIFO进行进程间通信
- 169. Majority Element 难度:Easy 类别:分治
- 职场中的智猪博弈
- 7.13 APOJ 1523SPF