C/S通讯,关于java.net.SocketTimeoutException:Read time out:错误

来源:互联网 发布:淘宝联盟等级划分 编辑:程序博客网 时间:2024/04/29 03:31

最近的超时异常在整理的文档中找到了,一并分享。

为什么会产生java.net.SocketTimeoutException: Read timed out:

产生此问题的根本原因是客户端在发送请求的过程中,服务器只接受了很少的一部分参数,但是此后客户端没有再发数据导致服务器接受的数据并不完整,所以wls在等待了30秒后 idle timeout,连接管理器将连接杀掉,服务器抛错。

那为什么会产生超时呢?原因很多,但无非以下几种:

首先,就要说到网络问题,虽然此说法并不让人信服,但这是客观存在的问题,当然这主要是看频率,如果一个月出几次,那也只能归于网络传输的问题。

其次,不得不说客户端的问题,用户在处理请求的过程中强行关闭浏览器,os操作系统问题,网卡或交换机硬件问题等等。总之,是客户端的问题导致了连接的异常,应用是无法解决此类问题。

再次,如果此超时发生在sevlet和ejb之间就是web或者app其他的处理超时,也就是txbean的超时,比如app拿回的结果集过大,又要对每个结果进行远程校验,web上载的过程中做了较长时间的解析等等。但都是web或app应用程序处理时间的问题或者sql的问题。

此外请注意,此超时可能由于很多原因,很多程序的异常都可能引起。例如同步提交等等

解决方案:

如果发生在web和客户段之间,也就是前端和servlet之间:

1,此问题大都发生在使用频率很大,如查询(query和dep都是查询的功能,且使用频率很大)的功能上,但是应用是无法控制客户端的行为,故此类问题,应用是无法用代码解决的。

只能在生产抛错时找到对应的客户端,但此类问题并发量大,客户端并不容易找。如果一周异常控制在一定数量内是无需关注的。

2,如果此类问题大批量发生,那就要找到发生问题集中的客户端群,检查物理交换机或者网卡等硬件的连通问题,或者客户端os。

如果发生在sevlet和ejb之间:

1,  将tras的bean的时间调长,可以解决部分问题,但不推荐,也不是解决问题的根本途径。

2,  调优sql减少查询时间,减少db层带来的问题。

3,  对应用的处理过程进行优化,降低处理的时间,如果应用处理的时间无法减少,可考虑采用异步的方式,发请求,返回请求,处理,返回数据。

4,其他类型引起的就要查程序流程,看处理的是否得当,具体要分析程序了