您的位置:首页 > 其它

jetty6部署环境下,大文件上传超时后被重复上传问题的解决

2016-12-03 15:37 686 查看
写的后台管理系统一直有一个bug,就是上传一个文件到后台,对于需要较长时间处理的文件,超时后这个文件被再次上传。刚开始百思不得其解,还以为是Http请求本身的机制就是这样。这几天我从前台开始排查,找到JS里send()函数,断点监控前台是否多次send(),发现前台没有多次send()。

在后台解析上传文件调试时,突然爆出:

JVM BUG(s) - injecting delay1 times

JVM BUG(s) - recreating selector 1 times, cancelled keys 32 times

与此同时,文件被再次上传的响应启动了。好的,锁定bug.

经查,这个bug最开始是JAVA NIO的bug,Jetty 6中对其进行了处理具体处理的原则在https://wiki.eclipse.org/Jetty/Feature/JVM_NIO_Bug中有详细说明。

我在其中看到有这么一句话:


Recreating Selector

If cancelling keys does not avoid the JVM bugs, when the JVMBUG_THRESHOLD is reached, Jetty discards the entire select set and creates a new one.

意思是说Jetty在遇到JVM的这个bug时,并且超时已到,就会丢弃整个选择,然后重新创建一个选择。或许这就是导致我文件多次上传的原因。

在这篇帖子中:http://codefine.co/100.html,作者说在最新的jetty中已经把这个问题修正。我把我的jetty6升级到jetty 8,OK问题得以解决。

这个bug困扰我快半年了,一直找不到出错的原因,这几天集中精力把他解决掉,找到原因,也算有所获得,然而对于这个bug的细节,其实并未掌握,看来需要学习的地方还是很多的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息