无法连接到 ec2 实例上的 Tomcat 服务器

Failed to connect to Tomcat server on ec2 instance

更新:

  1. 我的目标是了解哪些因素会使我的 tomcat 服务器不堪重负。当发生某些异常时,我可以做些什么来解决或补救它,而无需将我的服务器切换到更好的机器。这不是一个真正的生产环境的应用程序,只是我自己的实验(除了在服务器端的一些变化,我也可能在我的客户端做一些事情)

  2. 我的客户端和服务器都很简单:服务器只检查URL格式,如果正确就发送201代码。我的客户发送的每个请求只包含一个简单的 JSON 正文。不涉及数据库。两台机器(t2-micro)分别只有运行客户端和服务器。

  3. 我的客户是OkHttpClient()。为了避免超时异常,我已经通过 setConnectTimeoutsetReadTimeoutsetWriteTimeout 将超时设置为 1,000,000 毫秒。我也在我的服务器上转到 $CATALINA/conf/server.xml 并设置 connectionTimeout = "-1"(infinite)

原版POST:

我试图通过让客户端启动 3000 多个线程向我的服务器发送 HTTP 请求来增加我的服务器的压力。我的客户端和服务器都驻留在不同的 ec2 实例上。

一开始我遇到了一些超时问题,后来我把连接、读写超时设置大一点后,这个异常就解决了。但是,使用相同的规范,我得到 java.net.ConnectException: Failed to connect to my_host_ip:8080 异常。我不知道它的根本原因。我是多线程和分布式系统的新手,谁能给我一些关于这个异常的见解?

下面是我的 ec2 的一些截图:

1.客户:

2。服务器:

过去经历过类似的练习,我可以说缩放问题没有明确的答案。

以下是一些一般的故障排除步骤,可能会提供更具体的信息。我建议通过在每个测试中调整一些参数来尝试测试,并测量 Cpu、日志等

中的变化
  1. 请提供您为超时设置的值。增加超时可能会导致您的服务器(或客户端)快速 运行 线程不足(因为每个线程可以处理更长时间)。质疑增加超时的必要性。是否有任何处理会降低您的服务器速度?

  2. 检查客户端和服务器上的应用程序日志、JVM 使用情况、内存使用情况。那里会有一些提示。

  3. 您的客户似乎达到了 99%+ 然后下降了。这意味着客户端可能存在问题,因为它在测试期间达到最大值。您可能想调整客户端的大小以便能够执行更多操作。

  4. 查看打开的文件句柄。这个数字要足够高。

  5. Tomcat 对处理负载的线程数有一些限制。您可以在 server.xml 中检查它,如果需要,可以更改它以处理更多。尽管 cpu 实际上并没有在服务器端达到最大值,所以这不太可能是问题所在。

  6. 如果你是数据库,那么检查数据库的性能。同时检查 jdbc 连接设置。 jdbc 级别也有线程和超时配置。

  7. 是否在Tomcat上设置了响应压缩?它会在服务器上提供更好的吞吐量,特别是如果每​​个请求发回的数据超过几 kbs。

--------更新----------

根据问题的更新,还有一些想法。

由于应用程序相当简单,就服务器压力而言,路径应该是从低开始并逐渐增加负载,同时监控各种事物(cpu、内存、JVM 使用情况、文件句柄计数、网络 i/o).

负载增量应分布在几个 运行 秒内。 从低至 100 个并行线程开始。

在每次 运行 之后尽可能多地记录信息,如果服务器运行良好,请增加负载。

建议增量 100、200、500、1000、1500、2000、2500、3000。

在某种程度上,您会看到服务器无法再承受它。那将是你的突破点。

随着您增加负载和监控,您可能会发现建议调整特定参数的模式。然后应在同一级别的多线程中再次测试每个调整尝试。 available 的提升从监控上会很明显。