36-电子发票查询接口-TPS波动较大-典型的性能问题-内存溢出
2016-09-11 11:04
363 查看
2 电子发票查询接口TPS波动较大
2.1 问题描述
电子发票查询接口,2000Vuser并发下,TPS波动较大并且在2分钟后直降为0。如下图:
![](https://img-blog.csdn.net/20160911105957700)
2.2 定位思路
2.2.1 步骤一:典型的内存溢出
Jconsole工具查看内存回收情况。发现老生代,在短短的10分钟左右时间内存,FGC长达3分钟。一般情况下,1小时稳定测试中,FGC时间不会超过3分钟。
![](https://img-blog.csdn.net/20160911110033950)
2.2.2 步骤二:查看GC情况
查看GC情况:jstat -gc 30129 5000 ,主要关注FGCT(FGC的总时间)和FGC(FGC的次数)。FGC为FullGC的次数,由下图可知,FullGC的次数不断增加。
![](https://img-blog.csdn.net/20160911110105748)
2.2.3 步骤三:DUMP出内存快照
jmap -dump:live,file=1865.map 1865,DUMP出内存中存活的对象。
MemoryAnalyzer工具,分析DUMP出来的内存快照。发现如下图红框中,有1个多G的Session对象存活在内存中。导致的内存老生代的溢出。
![](https://img-blog.csdn.net/20160911110130923)
2.3 解决办法
当前测试的这个电子发票查询接口,用户通过订单号,查询发票详情,也就是PDF文件。当2000Vuser并发时,TPS约为7000左右。也就是有百万级的Session存活在内存中。导致内存溢出。
解决办法是:请求成功之后,会立即跳转pdf页面,在那将session失效,这里就不受session失效时间控制了。
session.invalidate这一步会在请求成功后的下一步进行操作的。相关代码:
![](https://img-blog.csdn.net/20160911110219674)
通过分析,是因为高并发的场景下session过多导致内存溢出。发现tomcat的1分钟失效时间并不足够;
解决方法: 对于我们发票查询系统,查完下载pdf之后,session就无作用,就可以立即释放session
我们在预览pdf之后,立即执行session.invalidate()将session立即失效。这样可解决内存溢出问题,最终tps稳定在4000左右.
2.4 最终TPS
![](https://img-blog.csdn.net/20160911110258297)
2.5 优化后的JVM内存回收情况
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内存回收情况
相关文章推荐
- 通过接口获取大量数据,内存溢出的问题
- 解决因数据库一次查询数据量过大导致的内存溢出问题
- session不及时释放导致内存溢出的性能问题分析
- 性能测试JMeter趟的坑之JMeter的bug:TPS周期性波动问题
- 性能測试JMeter趟的坑之JMeter的bug:TPS周期性波动问题
- tomcat 的jvm 内存溢出问题的解决及JVM性能调优
- 数据库查询压力大、web端容易内存溢出——解决方案、问题总结
- 完美解决因数据库一次查询数据量过大导致的内存溢出问题
- Tomcat Session机制,不及时释放导致内存溢出的性能问题分析
- session不及时释放导致内存溢出的性能问题分析
- mysql查询大量数据,php内存占用溢出问题
- 前端bugger 后端debug 介绍系统内部逻辑 压测新增订单接口 tps上不去 ,oom ,常见性能问题 ,性能分析思路
- EOS报表开发时出现内存溢出问题
- Tomcat 的JVM 内存溢出问题的解决
- ASP+SQL查询查询问题--SQL占用很大内存?
- Tomcat 的JVM 内存溢出问题的解决
- struts2自定义模板内存溢出 java.lang.OutOfMemoryError: Java heap space(问题已解决)
- 通过web service的方式上传附件和下载附件,以及内存溢出问题
- 解决PHP内存溢出的问题
- Sql Server 模糊查询的性能问题