`

java.net.SocketTimeoutException: Read timed out:

 
阅读更多
转自http://www.csdnjava.com/forum.php?mod=viewthread&tid=58526


为什么会产生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,其他类型引起的就要查程序流程,看处理的是否得当,具体要分析程序了
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics