这个问题的标题代表了我主要关心的问题,但是如果您继续阅读问题部分之外的内容,您会发现一些关于我们设置的背景......这可能相关/有用,也可能不相关。
问题
我们正在使用Gatling对我们的应用程序进行压力测试,并在单台机器上运行 Gatling 场景。我们发现我们的应用程序能够应对压力工具产生的高负载;但是,它无法应对来自真实用户的相对较低的负载。
我的问题是:当从单台机器/操作系统向应用程序发出并发请求时,与来自多台机器的并发请求(即使用他们的网络浏览器的普通用户)相比,会发生什么样的操作系统/网络级别优化或简化?
背景
我们有一个通过 AJP 位于 Apache 后面的 Tomcat 应用程序,它本身通过端口 80 位于 Citrix Netscaler 后面(我们还计划将 Apache 排除在外,但这是另一回事..)。
我们的应用程序在相对较低的负载下(在 apache 和 tomcat 之间建立了 CLOSE_WAIT 连接)一直处于停止状态,我们正在对其进行负载测试以解决问题。在我们的 SQLServer 实例中发生的死锁非常频繁地出现,因此我们决定从那里开始。为了复制问题并随后测试我们的修复,我们使用单台机器使用 Gatling 生成负载。
刚开始时,我们能够通过使用该工具可靠地复制死锁。在我们进行一些优化之后,死锁消失了,CLOSE_WAIT 连接也消失了。然后,我们将应用程序推到我们非常满意的负载,并且它运行时没有任何重大故障。
不幸的是,当修复应用到生产系统时,我们仍然看到相同的原始行为。这让我想知道压力工具生成的负载是否不能很好地代表现实世界中实际发生的情况,因为它源自单一来源,而不是分布在互联网上的许多不同客户端。