当前位置: 首页 > 知识库问答 >
问题:

504使用Tomcat的弹性负载均衡器错误

公冶谦
2023-03-14

我有一个应用程序运行在多个EC2实例上,由ApacheTomcat提供服务。我在应用程序前面安装了一个AWS弹性负载平衡器,一切基本上都按预期工作。然而,我偶尔会从ELB得到一个随机的504超时错误。这似乎与负载无关,因为我已经看到了轻负载和重负载下的错误。而且,它似乎没有任何规律或情况发生。

在我测试的早期,我收到了504个错误,因为我的应用程序响应时间比ELB上默认的60秒超时时间要长。我通过将ELB超时提高到我的应用程序所需的级别来解决这个问题。然而,我现在遇到的504个错误发生得非常快。例如,我看到的一个错误是一个响应时间约为1秒的请求。当应用html" target="_blank">服务器上的请求不可能超时时,出现超时错误似乎很奇怪。

这可能是一个类似于这个问题的问题,尽管我不能完全从所提供的信息中分辨出来。另外,我没有额外的负载平衡器,只是直接转到Tomcat。

共有2个答案

吴山
2023-03-14

ELB不太可能是问题的原因,而是表明你有问题。504错误是网关超时,当服务器(在本例中为Tomcat)响应不够快时发生。

(我多年来一直使用ELB进行极高的负载服务,并且不同意链接到其他SO答案的答案。虽然这在技术上是正确的,而且可能是非常高的突发率,比如一秒钟内成千上万的请求,除非你的音量这么高,否则我会先看看你的应用程序。)

要确认它不是ELB,最明显的测试是直接针对集群中的一个Tomcat服务器测试请求。如果无法路由到Tomcat实例,可以尝试从要测试的实例curl到localhost。

还请注意,ELB有一个健康检查设置,允许您设置某些规则来定义服务器是否健康——如果不健康,ELB将从集群中删除它,直到它再次健康。健康可以包括及时的反应。查看针对ELB的CloudWatch,看看最近是否有不健康的实例。

如果您在开发中看到504,现在它更频繁了,我想这实际上是一个负载或性能问题。最典型的情况是,由于底层应用程序的问题,Java遇到了一些垃圾收集问题。查看EC2实例的CloudWatch指标,看看内存或CPU是高还是高。

谭繁
2023-03-14

所以,在进一步挖掘之后,我发现了问题所在。本页通过解释有关空闲和保留超时的一些细节,有助于解开谜团:

从ELB接收504有两个直接原因:

  1. 实际上,应用程序的响应时间比ELB的连接超时时间长。这是一个缓慢的超时-504通常会在数秒后返回,ELB的默认值为60秒。在这种情况下,有必要增加ELB的连接超时,或者提高应用程序性能

第一个场景是我所看到的,并通过提高ELB超时来解决。第二个场景描述了我在提高ELB超时后看到的混乱行为。我的日志文件具有“-1-1-1”模式,如本文中的示例日志:

2015-12-11T13:42:07.736195Z my-elb 10.0.0.1:59893 - -1 -1 -1 504 0 0 0 "GET http://my-elb/ HTTP/1.1" "curl/7.19.7" - -

从结论来看:

简而言之,ELB的连接超时必须设置为低于应用程序的空闲和保留超时,以防止生成虚假的504。

在开始使用ELB之前的开发过程中的某个时刻,我设置了Tomcat超时,使其恰好高于默认的ELB超时。当我增加ELB超时时,我使其高于在Tomcat中设置的connectionTimeout。将connectionTimeout提高到略高于我的新ELB超时,从而消除了神秘的504错误。所以,我现在已经消除了“慢”和“快”超时错误。

Tomcat还有一个保持AliveTimeout设置,如果未设置,该设置默认与连接超时相同。我没有设置它,所以修改连接超时就足以解决我的问题。

 类似资料:
  • 我正在尝试配置 SSL 证书以通过 AWS 弹性负载均衡支持 HTTPS。我已配置所有内容: 1)在AWS ELB(包括证书链)中配置GoDaddy SSL证书。 2)让ELB侦听器看起来像这样: 客户端--- HTML 是我为 ELB 部署的索引.html页面,用于确认 EC2 实例已启动并正在运行。 但是,我遇到的问题是,如果任何移动客户端框架命中 service.acme.com 服务end

  • 负载均衡是任何可扩展软件系统的重要组成部分。通过在一组端点上智能分配流量-即便该集合动态更改,并且随着端点故障或减慢-良好的负载均衡可以减少尾部延迟并增加可靠性。linkerd 提供了各种强大的负载均衡算法,包括最小负载,EWMA和孔径(aperture)。这些算法已经在 Twitter 和其他公司进行了大量测试。 因为它在 RPC 层上运行,所以 linkerd 可以根据观察到的 RPC 延迟和

  • 我计划在谷歌云平台上为1700多个域(不同的网站)设置HTTP/HTTPS负载平衡(https://cloud.google.com/compute/docs/load-balancing/http/);所有人都将拥有TLS/SSL。但是,每个负载均衡器最多只能添加10个SSL证书,如下所示:https://cloud.google.com/compute/docs/load-balancing/

  • 负载均衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。 使用带有负载均衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载均衡服务通常是由专用软体和硬件来完成。 负载均衡最重要的一个应用是利用多台服务器提供单一服务,这种方案有

  • 负载均衡包括负载均衡实例、访问控制及证书。 实例 负载均衡实例是一个运行的负载均衡服务,通过设置的虚拟IP接收流量并将其转发分配给后端服务器。 访问控制 访问控制用于设置访问负载均衡的IP白名单或IP黑名单。 证书 当在负载均衡实例上配置HTTPS监听转发来自HTTPS协议的请求时,需要配置证书。

  • 一个简单的负载均衡的示例,把www.domain.com均衡到本机不同的端口,也可以改为均衡到不同的地址上。> http { : upstream myproject { : server 127.0.0.1:8000 weight=3; : server 127.0.0.1:8001; : server 127.0.0.1:8002; : server 127.0.0.1:8003; : }