问题描述
Tomcat里这个一个应用:客户端访问我的服务器,我再通过服务器访问别人的服务器。如果在访问别人服务器时很久没响应就会很长时间占用一个线程,而我这边客户端访问量很多,线程同时占用很多时就会把tomcat卡死,tomcat在服务器上看cpu和内存正常,只是访问网站时打不开,是一直连接的状态。设置了超时5S,可是本地测试,当对方服务器出问题时,我这边本地访问一直在连接,好久才报错。谁遇到过这样的问题,怎么解决? 谢谢! 问题补充:有什么办法可以防止tomcat卡死,我现在已经把tomcat的线程调大了,不知道有用没,也把服务器响应时间改为10S了
解决方案
HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时:System.setProperty("sun.net.client.defaultConnectTimeout", 超时毫秒数字符串);System.setProperty("sun.net.client.defaultReadTimeout", 超时毫秒数字符串);其中: sun.net.client.defaultConnectTimeout:连接主机的超时时间(单位:毫秒)sun.net.client.defaultReadTimeout:从主机读取数据的超时时间(单位:毫秒)
解决方案二:
1.可能是DNS得不到.注意有缓存http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/guide/net/properties.htmlhttp://download.oracle.com/docs/cd/E17409_01/javase/6/docs/technotes/guides/net/properties.html#nct2.JDK1.5+注意setConnectionTimeout和setReadTimeout3.也有可能是对方一直故意不给你结束标记.... ^_^