正在等待可用的套接字。。。

老系统很长时间没有用,再启动后,使用Chrome浏览器访问,发现点开第一个页面时,可以访问,再点开其他页面,页面不跳转,且浏览器显示“正在等待可用的套接字”。同时浏览器无报错,后台无报错,浏览器出现连接超时,重启系统,正在等待的页面即可加载出来,并且没有规律。

网上找的原因:

浏览器对同一个域名的sockets连接数作了限制,访问的网站上使用了html5 的socket通讯特性, 浏览器对这个连接数限制为6个, 当你刷新网页过快时, 以前的socket请求未能正常返回, 占了6个中的N个, 满了6个时, 就会出现阻塞,并无限排队的情况,就出现了这个问题。

问题解决:

打断点,查看系统代码,发现数据库连接异常缓慢,一表中数据85条,查询时间竟然需要3秒+,再查看配置文件,发现数据库连接与目前用连接不同,将数据库连接修改为目前用连接,系统恢复正常。

数据库查询时间过长,导致连接一直被占用,浏览器则一直处于等待状态,如果页面请求少,问题不大,如果页面请求多,则会出现这种情况;同时ajax请求,应该添加超时时间timeout,防止连接超时占用;

总结:

1、后台程序太慢,浏览器等着后台的返回值;

2、提示出来的错误,也许并非问题所在;

后续:

本系统使用了springCloud,可以在单个方法上添加

@HystrixCommand(fallbackMethod="fallback",
        commandProperties = {
                @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000" )
        }
)

使用了springcloud的一个组件-Hystrix

fallbackMethod:@HystrixCommand注解修饰的函数的回调函数,@HystrixCommand修饰的函数必须和这个回调函数定义在同一个类中,因为定义在了同一个类中,所以fackback method可以是public/private均可。

commandProperties:配置该命令的一些参数,如executionIsolationStrategy配置执行隔离策略,默认是使用线程隔离,此处我们配置为THREAD,即线程池隔离。参见:com.netflix.hystrix.HystrixCommandProperties中各个参数的定义。

@HystrixCommand注解的commandProperties属性是一个@HystrixProperty数组,@HystrixProperty必须指定name和value属性。

1000:超时时间。

发布了21 篇原创文章 · 获赞 0 · 访问量 2266

猜你喜欢

转载自blog.csdn.net/hfaflanf/article/details/102911096