问题描述:
Dubbo Rpc调用异常(第1次发送):
项目:agent-admin
类:com.yunji.oms.base.api.supplier.ISupplierService
方法:validLogin
失败次数:131
成功次数:1688
平均耗时:744
provider:172.16.4.13
consumer:172.16.4.19
时间:2018-12-06 17:50:30
Agentadmin调用异常,去线上服务器看agentadmin日志,日志出现Full GC.
问题分析:
在tomcat bin目录下通过jmap -dump:format=b,file=20181206.hprof 6561命令将内存结构全部dump到二进制文件中20181206.hprof中,然后用Eclipse Memory Analyzer工具打开该文件。得到如下图,图1所示的内存结构图,很明显该图有一个Problem,点击 See stacktrace展示图2内容。也可以直接看tomcat bin下面的.hprof,tomcat下面会自动生成内存结构的.hprof文件。

图1
确定问题点:
从该图中的内容可以看出PurchaseReportController这个类 473行代码可能有问题。在IDEA找到该类,打开。如图3示。
图2
图3所示代码 parser.parse(parserParam)中parserParam对象过大。parserParam将file中的内容一次处理。

图3
虽说rowBatchSize设置为20,但实际处理时是全部一次性处理的。如何优化如图5所示。
图4
解决方案:
要加入.rowHandler的处理,这样才能按rowBatchSize所设置的条码进行处理。要不然它将一次性将file文件中所有内容进行处理。
图5
浙公网安备 33010602011771号