如何排除 ELB Classic Load Balancer 上的高延迟问题?

上次更新日期: 2022 年 5 月 17 日

在与 Web 应用程序连接时我遇到高延迟问题,这些 Web 应用程序在注册到 Classic Load Balancer 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上运行。如何排除 Elastic Load Balancing 延迟问题?

简短描述

由于以下原因,Classic Load Balancer 会出现高延迟问题:

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

解决方法

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 延迟指标平均值统计数据。如果该值很高,则后端实例或应用程序依赖关系服务器存在问题。

5.    查看延迟指标的最大值统计数据。如果该值满足或超过空闲超时值,则请求可能超时,从而导致 HTTP 504 错误。

6.    查看延迟指标中的模式。如果指标高峰以固定间隔出现,则表示由于计划任务的开销,后端实例存在性能问题。

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

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 服务和代理服务器。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?