java 正在等待可用的套接字。。。
老系统很长时间没有用,再启动后,使用Chrome浏览器访问,发现点开第一个页面时,可以访问,再点开其他页面,页面不跳转,且浏览器显示“正在等待可用的套接字”。同时浏览器无报错,后台无报错,浏览器出现连接超时,重启系统,正在等待的页面即可加载出来,并且没有规律。
网上找的原因:
浏览器对同一个域名的sockets连接数作了限制,访问的网站上使用了html5 的socket通讯特性, 浏览器对这个连接数限制为6个, 当你刷新网页过快时, 以前的socket请求未能正常返回, 占了6个中的N个, 满了6个时, 就会出现阻塞,并无限排队的情况,就出现了这个问题。
问题解决:
打断点,查看系统代码,发现数据库连接异常缓慢,一表中数据85条,查询时间竟然需要3秒+,再查看配置文件,发现数据库连接与目前用连接不同,将数据库连接修改为目前用连接,系统恢复正常。
数据库查询时间过长,导致连接一直被占用,浏览器则一直处于等待状态,如果页面请求少,问题不大,如果页面请求多,则会出现这种情况;同时ajax请求,应该添加超时时间timeout,防止连接超时占用;
总结:
1、后台程序太慢,浏览器等着后台的返回值;
2、提示出来的错误,也许并非问题所在;
后续:
本系统使用了springCloud,可以在单个方法上添加
使用了springcloud的一个组件-Hystrix
fallbackMethod:@HystrixCommand注解修饰的函数的回调函数,@HystrixCommand修饰的函数必须和这个回调函数定义在同一个类中,因为定义在了同一个类中,所以fackback method可以是public/private均可。
commandProperties:配置该命令的一些参数,如executionIsolationStrategy配置执行隔离策略,默认是使用线程隔离,此处我们配置为THREAD,即线程池隔离。参见:com.netflix.hystrix.HystrixCommandProperties中各个参数的定义。
@HystrixCommand注解的commandProperties属性是一个@HystrixProperty数组,@HystrixProperty必须指定name和value属性。
1000:超时时间。