84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
有一个按钮用来向后台请求数据,我已经限制了这个按钮,从发起请求到请求数据接收完之间按钮是不可点击的,但是我后台数据返回是很快的,如果快速频繁的点击它,仍然会导致它不断的向后台请求数据,然后请求无响应了,服务器那边没反应了,服务器无法访问了,看后台日志又一切正常,没有任何错误(日志这块不太熟,不确定是真没错误信息,还是信息没有打出来)。 这里我比较困惑: 为什么浏览器端频繁操作会导致服务器端无响应?
拥有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:你可以通过请求得到的返回状态码来判断一下可能出错的位置。
以上