应用程序在高峰时段会变慢(有时),在部署在 AWS 上的 Apache 服务器的反向代理的 tomcat 上运行

应用程序在高峰时段会变慢(有时),在部署在 AWS 上的 Apache 服务器的反向代理的 tomcat 上运行

仅供参考:我是一名软件开发人员,起初没有人知道发生了什么,所以我做了一些测试和阅读,并想帮助我的同事解决这个问题。

问题:

问题是,在高峰时段,服务器变得非常慢,以至于在 Chrome 等浏览器中连接超时(30 秒后),但服务器仍然处于运行状态,可以在约 100 秒后提供页面(使用 insomnia 测试)。我在abs ...生产服务器上复制了这个问题,它与并发请求的数量有关,可能是由我们的 apache 服务器配置引起的。

更多信息:

在开发时,我们在本地运行 tomcat8,我已经用“”测试过abs -c 200 -n 2000 https:/[link],执行时间很好。但在测试生产服务器时,即使有 50 个并发请求,我测试的 API 的速度也会明显下降:从默认的 800 毫秒增加到 27846 毫秒。

尝试过的事情和更多细节:

我们正在运行 java melody,我想也许我们达到了 tomcat 执行线程的线程限制,所以我们将线程数从默认的 200 增加到 500(这是我进行测试之前的情况)。在运行上述测试时,我可以看到繁忙线程数上升到 500 个中的 50 个左右(在生产环境中运行,因此有些人实际上也在使用该程序),但不,它仍然减慢了很多。

在高峰时段,我发现我们有大约 1000 个 http 会话,但线程、内存和 CPU 远未达到 100%。为了确保我们将服务器升级到最佳状态,但当然不是这样。我们正在使用 SQL,但 SQL 服务器也没有达到峰值,所以我怀疑这不是问题所在。

我知道我不应该模仿 JVM 参数,但看到类似的问题,我尝试添加“-XX:ReservedCodeCacheSize=512M”,但也没有用。我还尝试在 server.xml 中将 acceptCount 增加到 1000,但仍然不起作用。我应该撤销这些更改吗?我没有注意到任何性能变化,而且据我从阅读文档中了解到,保持这种状态是可以的。

我们有一个奇怪的功能,即 Web 应用在一段时间不活动后会转到主页,然后每隔 xx 分钟就会刷新一次主页。我认为这对性能不利,尤其是当用户打开了很多选项卡并且它们开始刷新时,这可能不是导致我们出现问题的原因,但值得一提。

今天我要尝试的下一件事是弄乱 Apache 服务器参数。我正在阅读调音指南和 MaxRequestWorkers / MaxClients 看起来可能可以解释我们所经历的事情。引用如果该指令太低,Apache 将无法充分利用可用的硬件,从而导致金钱浪费和高峰时段页面加载时间的长时间延迟。

我将不胜感激任何提示。希望这只是 Apache 服务器的问题,我至少可以让服务器今天可用。还有其他配置可能会导致速度变慢吗?

答案1

您的网络服务器可能因请求过多而堵塞,这实际上模拟了 SlowLoris DOS 攻击,请查看我的上一个答案关于该主题。

相关内容