自从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连接数会飙升的很高,达到几百甚至上千,导致等待处理的请求连接数太高:

当初为什么会用这个定时器方法来让一个方法多执行几遍,原因就是为了获取一个数据的稳定值,但是现在想来,带来的负面影响代价是多么的大,产生的效果是不可小觑的,不过经过几天的综合分析和测试,终于还是发现了这个罪魁祸首,问题解决后,心,一下子豁然了,可以安心睡觉了。。。

转载于:https://www.cnblogs.com/insane-Mr-Li/p/11114578.html

最近纠结致死的一个java报错java.net.SocketException: Connection reset 终于得到解决相关推荐

  1. java报错java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that

    仔细阅读了代码发现 import java.sql.*;public class DataBase {public static void main(String[] args) throws SQL ...

  2. java报错--java.io.IOException: Server returned HTTP response code: 502

    java.io.IOException: Server returned HTTP response code: 502 for URL: http://ip.taobao.com/service/g ...

  3. ssh连接远程服务器报错:ssh_exchange_identification: read: Connection reset by peer

    报错如下: 解决方案如下: vi /etc/hosts.allow 打开后文件内容如下: 我这里在文件最后添加一行内容: sshd:ALL 添加后文件内容如下图: 我添加的这行内容表示允许所有的机器通 ...

  4. mac下ssh报错:ssh_exchange_identification: read: Connection reset by peer

    1.美图 2.背景 (base) lcc@lcc hadoop-2.7.4$ sh sbin/stop-all.sh This script is Deprecated. Instead use st ...

  5. java报错-找不到或无法加载主类(Error: Could not find or load main class)

    此文首发于我的个人博客:java报错-找不到或无法加载主类(Error Could not find or load main class) - zhang0peter的个人博客 比如说test.ja ...

  6. DRP问题集结(一)-Tomcat无法启动,报错java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory...

    问题一:  Tomcat无法启动,报错java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory 问题二:[Error]Jav ...

  7. maven引用servlet_解决Maven 项目报错 java.httpservlet和synchronized使用方法

    使用java8 的lanmbe表达式时,使用java1.8编译,则会报错 需要在pom.xml的中添加 org.apache.maven.plugins maven-compiler-plugin 2 ...

  8. 解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener

    解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener   笔者在做代 ...

  9. Poi读取Excle报错 java.util.zip.ZipException: invalid stored block lengths

    一:Poi读取Excle报错  java.util.zip.ZipException: invalid stored block lengths 系统中需要导出excle签收单,excle模板是预设好 ...

最新文章

  1. Java gdal .mif/.mid文件读取
  2. channel rabbitmq 配置_「喵咪MQ(2)」RabbitMQ单机模式使用
  3. 整人之bat重启文件
  4. 移动測试技术保护源码!解码全球首款移动端白盒測试工具ThreadingTest (文章转自己主动点科技)...
  5. Python——函数 8、可变长参数
  6. 2020ICPC(南京) - Just Another Game of Stones(吉司机线段树+博弈)
  7. SQLite的基本使用一
  8. 向极限挑战:算术编码 (转)
  9. TensorFlow (RNN)深度学习 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 序列标注问题 源码下载...
  10. Intel Core Enhanced Core架构/微架构/流水线 (10) - 先进存储器访问
  11. Python入门--顺序结构,选择结构,对象的布尔值
  12. 工具系列————linux系统中安装fortran编译器(ifort)
  13. 6.STM32F407之HAL库——定时器中断
  14. Tianchi big data competition天池大数据挑战(CV场)
  15. FAT文件系统规范v1.03学习笔记---1.保留区之启动扇区与BPB
  16. camisetas de futbol baratas carrera
  17. Google map地图限制显示区域、拖拽范围
  18. 云服务器上搭建个人云笔记——leanote
  19. scala学习笔记:各种奇怪的写法
  20. 写一个在线位图字体制作工具!BitmapFont!

热门文章

  1. linux用cmake编译,CMake使用简介(forLinux)
  2. rx java_你会在实际工作中使用 rxjava 吗?
  3. 用计算机打李白的歌,抖音笨李白是什么歌 歌词中带有笨李白原版歌曲名字-游侠手游...
  4. docker xware下载慢_win7环境下Docker快速构建及阿里云容器加速配置
  5. Ubuntu进入pycharm创建的虚拟环境的方法(以及如果你安装了anaconda等其它修改了环境变量的东西该怎么进)
  6. 关系代数操作应用、关系元组运算应用
  7. opencv 基本绘图功能 画直线 画圆 给图像添加文字等
  8. matlab实现直方图均衡化
  9. rancher中添加用户,赋予权限
  10. mysql数据库连接数瓶颈_MySQL数据库性能优化之硬件瓶颈分析