客户端在与 Web 应用程序连接时遇到高延迟,该 Web 应用程序在注册 Classic Load Balancer 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上运行。如何排查此 Elastic Load Balancing (ELB) 延迟问题?

Classic Load Balancer 上的高延迟问题可能由以下原因所致:

  • 网络连接问题
  • Classic Load Balancer 的配置不正确
  • 后端实例上的高内存 (RAM) 利用率
  • 后端实例上的高 CPU 利用率
  • 后端实例上的 Web 服务器配置不正确
  • 在后端实例(如外部数据库或 Amazon Simple Storage Service (Amazon S3) 存储桶)上运行的 Web 应用程序依赖项存在问题

1.    排查 Classic Load Balancer 的网络连接问题。 

2.    确保为您的使用案例正确配置 Classic Load Balancer

3.    通过检查 Classic Load Balancer 的访问日志来确定哪些后端实例遇到高延迟问题。查看 backend_processing_time 以查找存在延迟问题的后端实例。

要验证后端实例的 Web 应用程序服务器是否遇到高延迟问题,请使用 curl 来测量首字节响应。例如:

[ec2-user@ip-192.0.2.0 ~]$ for X in `seq 6`; do curl -Ik -w "HTTPCode=%{http_code} TotalTime=%{time_total}\n" http://www.example.com/ -so /dev/null; done

High Latency sample output:
HTTPCode=200 TotalTime=2.452
HTTPCode=200 TotalTime=1.035

Low latency sample output:
HTTPCode=200 TotalTime=0.515
HTTPCode=200 TotalTime=0.013

4.    检查 Classic Load Balancer 的 CloudWatch 延迟指标平均统计数据。如果此值很高,则通常表明后端实例或应用程序依赖项服务器而不是 ELB 存在问题。 

5.    检查延迟指标的最大统计数据。如果此值达到或超过空闲超时值,则请求可能已超时。此问题会导致客户端出现 HTTP 504 错误。

6.    检查延迟指标中的模式。如果该指标按固定的时间间隔或以某种模式出现峰值,则可能表明后端实例存在性能问题。计划任务的开销可能会导致此问题。

7.    检查 ELB 的 CloudWatch SurgeQueueLength 指标。如果对 Classic Load Balancer 的请求超出最大值 (1024),则请求会被拒绝,并且负载平衡器将生成 HTTP 503 错误。SpilloverCount 指标的总计统计数据用于度量被拒绝请求的总数。有关更多信息,请参阅如何排查 Elastic Load Balancing 容量问题?

8.    通过检查后端实例上的 Apache 进程来检查可能的内存问题。

示例命令:

watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m"

示例输出:

Every 1.0s: echo –n 'Apache Processes: ' && ps –C apache2 –no-
headers | wc -1 && free –m
Apache Processes: 27
          total     used     free     shared     buffers     cached
Mem:      8204      7445     758      0          385         4567
-/+ buffers/cache:  2402     5801
Swap:     16383     189      16194

9.    检查后端实例的 CloudWatch CPUUtilization 指标。查找高 CPU 利用率或 CPU 利用率峰值。对于高 CPU 利用率,请考虑将实例升级为更大的实例类型。

10.    检查后端实例上的 Web 服务器的 MaxClient 设置,该设置定义实例可以同时处理多少个请求。对于具有适当内存和 CPU 利用率并遇到高延迟问题的实例,请考虑增大 MaxClient 值。

将 Apache (httpd) 生成的进程数与 MaxClient 设置进行比较。如果 Apache 进程数频繁达到 MaxClient 值,请考虑增大该值。

示例命令:

[root@ip-192.0.2.0 conf]# ps aux | grep httpd | wc -l 15

示例输出: 

<IfModule prefork.c>
StartServers         10
MinSpareServers      5
MaxSpareServers      10
ServerLimit          15
MaxClients           15
MaxRequestsPerChild  4000
</IfModule>

11.    检查可能导致延迟问题的后端实例的依赖项。这些包括但不限于:共享数据库、外部资源(如 S3 存储桶)、外部资源连接(如网络地址转换 (NAT) 实例)、远程 Web 服务和代理服务器。


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS Support 中心

发布时间:2017 年 10 月 10 日

更新时间:2018 年 12 月 18 日