最近纠结致死的一个java报错java.net.SocketException: Connection reset 终于得到解决
自从SEOTcs系统11月份24日更新了一下SEO得分算法以来,一直困扰我的一个问题出现了,java的数据job任务,在执行过程中会经常报以下的错误:
“2011-12-03 18:00:32 DefaultHttpClient [INFO] I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error
2011-12-03 18:00:32 DefaultHttpClient [INFO] Retrying request”…
为此,我找遍了中英文的一些网站,搜遍了能找的每个角落,发现了出现这种状况的原理,该java异常在客户端和服务器端都有可能发生,引起该异常的原因有两个:
1,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。
2,一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。
于是我简单的认为通过设置一些socket的timeout时间,就能解决:
但是设置以后情况依然是那样。
这个问题困扰了好几天,每天都在思考和对比测试中,以求发现造成这个原因代码的地方,我不禁思考,同样数量的关键词数量前提下,为什么之前批量查询
排名数据没有出错,而最近会频繁报错,这到底是为什么?是被请求的接口网站屏蔽掉了我们的服务器ip?这个理由也不是很充分,肯定是程序中某个地方没有合
理释放掉connection的连接导致!
在这个思路的指引下,通过几天连续的奋战和实践,今天终于发现了问题的本质,那就是那个timer的方法导致的!情况是这样的,这几天,我在手动触
发一些批量任务,发现在过滤排名值为100的情况下,java的java.net.SocketException: Connection reset
这个错会一直抛出,而且刷屏特别厉害,在仔细对照了timer的这段代码
后,终于猛然醒悟,对!就是这里出问题了,我自己来分析一下:
一个函数值,它返回的值,是一个临界值,但是我这个timer的方法中,判断了返回的值如果是临界值的话,会迫使它在10秒内继续执行那个方法,而
这个方法是要去获取一个页面中源代码的一个特定数据,每次这个方法执行会消耗掉几十毫秒的时间,即相当于在这个时间内,是建立了一个socket连接,但
是由于它一直返回的是那个临界值,所以这个方法会在10秒内不停的建立socket连接以获取数据,如果这个方法每次执行时间大概是80ms(经过测试,
每个这样的方法执行时间为80毫秒左右),在10秒时间内,会建立10*1000/80 =
125次socket连接,即每秒会建立起12.5个socket连接,再加上由于这个是过滤的程序,多个临界值的情况会连续出现在一起,所以,在短暂的
几秒钟内,对同一个网站页面的socket连接数会飙升的很高,达到几百甚至上千,导致等待处理的请求连接数太高:
当初为什么会用这个定时器方法来让一个方法多执行几遍,原因就是为了获取一个数据的稳定值,但是现在想来,带来的负面影响代价是多么的大,产生的效
果是不可小觑的,不过经过几天的综合分析和测试,终于还是发现了这个罪魁祸首,问题解决后,心,一下子豁然了,可以安心睡觉了。。。
最近纠结致死的一个java报错java.net.SocketException: Connection reset 终于得到解决的更多相关文章
- java报错java/lang/NoClassDefFoundError: java/lang/Object
安装完java出错 javac和java -version 都无效,报错如上 解决方法,更改文件中的两个文件(前提是你的 vim /etc/profile 文件路径写的正确) /usr/java/ ...
- 解决sqoop抽数报错:IO Error: Connection reset
遇到的问题:进行sqoop抽数时,虽然能成功执行,但是过程中有很多这样的信息 19/11/20 15:17:11 INFO mapreduce.Job: Task Id : attempt_15737 ...
- java.net.SocketException: Connection reset 解决方法
java.net.SocketException: Connection reset 解决方法 最近纠结致死的一个java报错java.net.SocketException: Connection ...
- [java报错]Could not instantiate listener XXXXXX
写在开头的话: 兜兜转转,辞去了深圳的工作,回到了武汉,从事的居然一度是我最不想学的语言-java,曾经以为自己并不会java,但是上手之后,发现语言都是相通的,自己一度排斥学习java真的是不能再傻 ...
- zookeeper报错java.net.ConnectException: Connection refused: no further information
zookeeper报错java.net.ConnectException: Connection refused: no further information 这是在linux 启动 https:/ ...
- 云笔记项目- 上传文件报错"java.lang.IllegalStateException: File has been moved - cannot be read again"
在做文件上传时,当写入上传的文件到文件时,会报错“java.lang.IllegalStateException: File has been moved - cannot be read again ...
- 项目报错java.lang.ClassNotFoundException: org.common.SessionListener
现象:项目报错java.lang.ClassNotFoundException: org.common.SessionListener,并且myeclipse左侧Package Explorer中项目 ...
- java含有静态代码块新建的时候报错java.lang.ExceptionInInitializerError
问题描述 最近在写一些单元测试用例,为了避免连接外界服务,所有选择mock了数据库Dao层,计划将数据库所需要的数据存在List中,在类加载的时候初始化List并且填充数据.代码如下: public ...
- java 报错及解决
java文件编译报错:error: unmappable character for encoding ASCII 解决: 编译时:javac -encoding utf-8 TestJava.jav ...
随机推荐
- Effective C++_笔记_条款03_尽可能使用const
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 关键字const多才多艺,语法变化多端.关于const的基本用法 ...
- 使用JDK自带的工具将中文转换为ascii码
有时候在MyEclipse中,文件只能保存为“ISO-8859-1”的类型,而这种类型的文件时无法保存中文数据的,那么我们只能将中文数据经过Unicode编码才能往文件中保存,这里可以使用JDK自带的 ...
- Python 学习入门(20)—— 循环
1. for 循环 for循环需要预先设定好循环的次数(n),然后执行隶属于for的语句n次. 基本构造是 for 元素 in 序列: statement 举例来说,我们编辑一个叫forDemo.py ...
- 让delphi程序不受WINDOWS日期格式的影响(使用SetLocaleInfo函数和Application.UpdateFormatSettings)
如果WINDOWS系统的短日期格式为“yyyy/m/d”,执行下面的代码会报错:2013-01-29 00:00:00不是合法的日期procedure TFrmQuerySale.FormShow(S ...
- 测试关闭mojo utf-8
[root@wx03 ~]# cat test.pl use Mojolicious::Lite; use JSON qw/encode_json decode_json/; use Encode; ...
- gcc manual
$ gcc --helpUsage: gcc [options] file...Options: -pass-exit-codes Exit with highest error c ...
- linux c正则
c 正则 -------------------------------------------------- 标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一 ...
- win32多线程程序设计笔记(第二章)
第二章线程的第一次接触,主要讲了如何创建线程以及需要注意的几点. 一.创建线程 与调用函数的过程类似;线程只不过用CreateThread的API将函数封装起来,并产生一个与主程序同时执行的程序来调用 ...
- Latin1的所有字符编码
ISO-8859-1 (ISO Latin 1) Character Encoding Contents The characters at a glance Character codes and ...
- Eclipse Tips
一.取消拼写检查 Window -> Preferences -> General -> Editors -> Text Editors -> Spelling -> ...