84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
有一个按钮用来向后台请求数据,我已经限制了这个按钮,从发起请求到请求数据接收完之间按钮是不可点击的,但是我后台数据返回是很快的,如果快速频繁的点击它,仍然会导致它不断的向后台请求数据,然后请求无响应了,服务器那边没反应了,服务器无法访问了,看后台日志又一切正常,没有任何错误(日志这块不太熟,不确定是真没错误信息,还是信息没有打出来)。这里我比较困惑:为什么浏览器端频繁操作会导致服务器端无响应?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
问题最终解决了,问题的原因是数据库访问没有加事务注解,导致数据库访问的连接没有被管理,导致连接池中连接数不断增加进而超出,然后服务器就无响应了。正常来说这应该会报错才对,我最开始选择的数据库连接池是org.apache.commons.dbcp.BasicDataSource,不知道为什么没有报错,让我对问题无法定位;然后通过tomcat日志中connection reset信息猜测和数据库连接数有关;然后我换了一个连接池org.logicalcobwebs.proxool.ProxoolDataSource,这回报错明显,当我数据库访问超过一定次数,直接报错告诉我连接数超出了;然后我就发现是连接数没有被释放,然后我就发现是代码里没有加事务的注解(加了之后应该就是由spring来负责数据库连接的管理,是吗?),一个注解,解决了我的问题。。。有所收获
服务器无响应分为这样几种情况
1:服务器挂了。这个时候服务器是没法访问的。整个服务器已经挂掉了。检测方法最简单,直接ping一下即可2:服务挂了。就是你提供响应的服务挂了,系统内部异常,这个服务可能是一个进程。检测也比较简单,访问一下其它的服务看是否可用。3:网络异常,用第一步的检测方法即可
ping
回到你的问题为什么浏览器端频繁操作会导致服务器端无响应?
为什么浏览器端频繁操作会导致服务器端无响应?
这个原因可能有1:该服务被逻辑过于复杂,处理时间过长。导致后面的请求都被阻塞挂起了。2:内部异常了,导致服务所在的进程挂了,因此后续的请求也无法得到响应。PS:你可以通过请求得到的返回状态码来判断一下可能出错的位置。
以上
问题最终解决了,问题的原因是数据库访问没有加事务注解,导致数据库访问的连接没有被管理,导致连接池中连接数不断增加进而超出,然后服务器就无响应了。正常来说这应该会报错才对,我最开始选择的数据库连接池是org.apache.commons.dbcp.BasicDataSource,不知道为什么没有报错,让我对问题无法定位;然后通过tomcat日志中connection reset信息猜测和数据库连接数有关;然后我换了一个连接池org.logicalcobwebs.proxool.ProxoolDataSource,这回报错明显,当我数据库访问超过一定次数,直接报错告诉我连接数超出了;然后我就发现是连接数没有被释放,然后我就发现是代码里没有加事务的注解(加了之后应该就是由spring来负责数据库连接的管理,是吗?),一个注解,解决了我的问题。。。有所收获
服务器无响应分为这样几种情况
1:服务器挂了。这个时候服务器是没法访问的。整个服务器已经挂掉了。检测方法最简单,直接
ping
一下即可2:服务挂了。就是你提供响应的服务挂了,系统内部异常,这个服务可能是一个进程。检测也比较简单,访问一下其它的服务看是否可用。
3:网络异常,用第一步的检测方法即可
回到你的问题
为什么浏览器端频繁操作会导致服务器端无响应?
这个原因可能有1:该服务被逻辑过于复杂,处理时间过长。导致后面的请求都被阻塞挂起了。2:内部异常了,导致服务所在的进程挂了,因此后续的请求也无法得到响应。PS:你可以通过请求得到的返回状态码来判断一下可能出错的位置。
以上