频繁请求后台导致服务器无响应一般是什么原因呢


有一个按钮用来向后台请求数据,我已经限制了这个按钮,从发起请求到请求数据接收完之间按钮是不可点击的,但是我后台数据返回是很快的,如果快速频繁的点击它,仍然会导致它不断的向后台请求数据,然后请求无响应了,服务器那边没反应了,服务器无法访问了,看后台日志又一切正常,没有任何错误(日志这块不太熟,不确定是真没错误信息,还是信息没有打出来)。
这里我比较困惑:
为什么浏览器端频繁操作会导致服务器端无响应?

图片描述

服务器 web java

王牌D机狮 9 years, 11 months ago

服务器无响应分为这样几种情况

1:服务器挂了。这个时候服务器是没法访问的。整个服务器已经挂掉了。检测方法最简单,直接 ping 一下即可
2:服务挂了。就是你提供响应的服务挂了,系统内部异常,这个服务可能是一个进程。检测也比较简单,访问一下其它的服务看是否可用。
3:网络异常,用第一步的检测方法即可

回到你的问题 为什么浏览器端频繁操作会导致服务器端无响应?

这个原因可能有1:该服务被逻辑过于复杂,处理时间过长。导致后面的请求都被阻塞挂起了。2:内部异常了,导致服务所在的进程挂了,因此后续的请求也无法得到响应。PS:你可以通过请求得到的返回状态码来判断一下可能出错的位置。

以上

6yecao answered 9 years, 11 months ago

问题最终解决了,问题的原因是数据库访问没有加事务注解,导致数据库访问的连接没有被管理,导致连接池中连接数不断增加进而超出,然后服务器就无响应了。正常来说这应该会报错才对,我最开始选择的数据库连接池是org.apache.commons.dbcp.BasicDataSource,不知道为什么没有报错,让我对问题无法定位;然后通过tomcat日志中connection reset信息猜测和数据库连接数有关;然后我换了一个连接池org.logicalcobwebs.proxool.ProxoolDataSource,这回报错明显,当我数据库访问超过一定次数,直接报错告诉我连接数超出了;然后我就发现是连接数没有被释放,然后我就发现是代码里没有加事务的注解(加了之后应该就是由spring来负责数据库连接的管理,是吗?),一个注解,解决了我的问题。。。有所收获

a-kano answered 9 years, 11 months ago

Your Answer