远程主机强迫关闭了一个现有的连接。

远程主机强迫关闭了一个现有的连接。

问题描述:

​ 前端调用一个导出数据接口时,有时候无数据返回。 查看日志: jetty报错:java.io.IOException:远程主机强迫关闭了一个现有的连接。

解决问题:

  1. 首先我翻看这个接口的代码,没有找到问题。然后我又祭出了重启大法,项目重新编译,启动,然后重新访问这个接口,很不幸,这个bug还是复现了,难受啊、、、

  2. 我仔细查看日志,发现日志没有报其他的错误,这就很奇怪。

  3. 我又在代码中加了日志,想看看究竟发生了什么。然后发现原因是这个接口耗时太长,前端请求超时,才报了这个错误

    jetty报错:java.io.IOException:远程主机强迫关闭了一个现有的连接。

  4. 这个接口的主要的功能就是导出数据报表,有两部分构成,一部分是查询统计数据,另一部分就是讲数据补充到excel中,然后导出。

打印的日志,统计时间(单位:毫秒)

DEBUG c.x.t.controller.statistics.UserCountController - ==================================================================统计消耗时间:1381

DEBUG c.x.t.controller.statistics.UserCountController - ==================================================================导出完毕消耗时间:43105

​ 日志告诉我发生了什么,统计部分所用时间是1秒左右,还在忍受范围之内,但是往表格中填充数据就花了这么长时间,这不能忍啊!罪魁祸首找到了!

  1. 为什么这么填充过程这么慢呢,我又仔细查看代码,发现在导出excel的过程中,一次是导出10000行数据,我寻思是不是这个过程数据太多耗时太长呢?我把这一个参数改成5000,然后编译,运行,重新访问。我再一次查看日志,

DEBUG c.x.t.controller.statistics.UserCountController - ==================================================================导出完毕消耗时间:6705

后台也不再报错,打印出来的时间也还能接受吧,至此,这个bug算是解决了吧

你可能感兴趣的:(远程主机强迫关闭了一个现有的连接。)