apache - Web 应用程序在多次请求后挂起

标签 apache tomcat

该应用程序使用 Apache Server 作为 Web 服务器,使用 Tomcat 作为应用程序服务器。

可以从 UI 触发操作/请求,这可能需要一些时间才能从服务器返回,因为它会执行一些处理,例如从数据库中获取数据并对该数据执行计算。该时间取决于数据库中的数据量及其处理数据的持续时间。根据参数,它可能长达 30 分钟到 1 小时或 2 分钟。

除此之外,还有一些其他调用从数据库中获取少量数据并立即返回。

现在,当我有多个,比如 4 或 5 个对服务器的长而重的调用,并且它们当前正在运行时,当我进行一个应该更小的调用并立即返回时,这个调用也会挂起,因为它从来没有到达我的 Controller 。

我无法找到调试此问题或找到解决方案的方法。如果您碰巧知道如何处理此问题,请告诉我。

我正在使用 Spring,以及带 Hibernate 的 c3p0 连接池。

最佳答案

所以我找出了应用程序的问题所在,并考虑分享它以防某个地方的人遇到同样的问题。事实证明,应用服务器或 Web 服务器没有任何问题,从技术上讲,这是浏览器的问题。

我发现浏览器只能对一个域打开有限数量的并发调用。在撰写本文时最新版本的 chrome 是 6。这是所有浏览器为防止 DDOS 攻击所做的事情。

在我的应用程序中,HTTP 调用需要很长时间才能返回,直到计算完成几个 HTTP 调用并发累积,结果,浏览器在第 6 个并发调用后停止发送任何进一步的调用,感觉就像应用程序没有响应。您可以阅读 SO 中浏览器的最大并发调用数。

我认为一个可能的解决方案是轮询或更好的长轮询。我会使用 WebSockets,但我们需要做很多改变。

关于apache - Web 应用程序在多次请求后挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37987081/

相关文章:

java - 从Java应用程序启动Flume Agent

php - Apache 2.4 php 7.2 Apache(php 模块)增加最大连接数以处理 10000

apache - 编辑/更改服务器上的 300 多项选择

java - tomcat 未在 eclipse 中启动,Logger ClassnotFoundException,无效的 LOC header

apache - 如何重定向所有 https ://requests to a subdomain on the server

运行在 Apache Tomcat 上的 Java TCP 服务器程序

java - 有没有办法使用 IBM websphere 在预定时间运行 jar

tomcat - 匿名 tomcat 停止/杀死

java - Tomcat JNDI Bean

openshift中的Java RMI端口绑定(bind)错误