如何對 ElastiCache for Valkey 或 ElastiCache for Redis OSS 中的高延遲問題進行疑難排解?

2 分的閱讀內容
0

我想要追蹤 Amazon ElastiCache for Valkey 或 Amazon ElastiCache for Redis OSS 叢集中的高延遲問題。

簡短描述

以下是 ElastiCache for Valkey 或 ElastiCache for Redis OSS 叢集中高延遲問題的常見原因:

  • 命令變慢
  • 由於記憶體使用量高,交換活動增加
  • 網路問題
  • 用戶端延遲問題
  • Redis 同步處理
  • Amazon ElastiCache 叢集事件

解決方法

命令變慢

由於 Valkey 和 Redis OSS 叢集是單執行緒,在目前的請求完成之前,ElastiCache 無法為用戶端提供服務。這種減速會導致請求總時間增加,並導致高延遲。

若要監控平均延遲,您可以使用 Valkey 和 Redis 的 Amazon CloudWatch 指標來監控特定命令。如需詳細資訊,請參閱 Valkey 和 Redis OSS 的指標

若要擷取引擎處理時間超過 10 毫秒的命令清單,請使用 SLOWLOG GET 命令。您可以連線到受影響的節點,在 valkey-cli 中執行 slowlog get 128 命令。

此外,ElastiCache 會以微秒延遲計算常見的 Redis 操作。CloudWatch 會每分鐘對指標進行取樣,並將延遲指標顯示為多個命令的總計。單一命令可能會導致逾時等小問題,但不會導致指標圖表發生重大變化。

需要很長時間才能完成的慢速命令可能會導致 ElastiCache 節點上的 CPU 使用量增加。如果 EngineCPUUtilization 指標增加,則請參閱如何對 ElastiCache for Redis 自行設計叢集中 CPU 使用量增加的問題進行疑難排解?

以下是可能減慢 ElastiCache 叢集速度的複雜命令範例:

  • 在具有大型資料集的生產環境中使用 KEYS 命令: KEYS 命令會掃描整個索引鍵空間並搜尋指定的模式。如需詳細資訊,請參閱 Valley 網站上的 KEYS
  • 需要長時間執行的 Lua 指令碼: 根據指令碼的複雜程度或資料集的大小,Lua 指令碼可能會長時間執行並導致延遲問題。

由於記憶體使用量高,交換活動增加

當叢集的記憶體壓力增加時,Redis 會交換記憶體頁面。由於記憶體頁面在交換區域之間傳輸,因此交換可能會增加延遲並導致逾時。CloudWatch 指標中的以下變化是交換活動增加的跡象:

  • SwapUsage 增加
  • FreeableMemory 偏低
  • BytesUsedForCacheDatabaseMemoryUsagePercentage 指標過高

若要對交換活動增加的問題進行疑難排解,請查看以下文章:

網路問題

網路問題可能會導致叢集出現高延遲。根據您的網路問題,完成以下任務以對高延遲問題進行疑難排解。

用戶端與 ElastiCache 叢集之間的網路延遲

若要減少用戶端與 ElastiCache 叢集之間的延遲,您可以隔離用戶端和叢集節點之間的網路延遲。如需更多資訊,請參閱如何透過網際網路閘道對虛擬私有雲端 (VPC) 中的 EC2 Linux 或 Windows 執行個體與內部部署主機之間的網路效能問題進行疑難排解?

叢集達到網路限制

ElastiCache 節點與相關的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體有相同的網路限制。例如,ElastiCache cache.m6g.large 節點類型和 Amazon EC2 m6g.large 執行個體的網路限制是相同的。如需支援的 ElastiCache 節點類型和網路頻寬限制的詳細資訊,請參閱支援的節點類型

若要對 ElastiCache 節點網路限制進行疑難排解,請參閱網路相關限制

**注意:**最佳做法是監控您的 Amazon EC2 執行個體網路效能、頻寬能力、每秒封包 (PPS) 效能和追蹤的連線。

TCP/SSL 信號交換延遲

當用戶端連線到 Redis 叢集時,建立 TCP 連線可能需要幾毫秒。在此期間,延遲可能會對您的 Redis 作業和 ElastiCache 節點 CPU 造成額外的壓力。當您有許多新連線時,這種壓力可能會導致網路的高延遲。

若要控制連線數量並減少延遲,您可以使用連線集區將已建立的 TCP 連線快取到集區中。若要設定連線集區,請使用 Redis 用戶端程式庫。或者,您可以手動建立連線集區。

若要最佳化連線集區,您也可以使用彙總命令 (例如 MSETMGET) 或 Redis 管線。如需詳細資訊,請參閱 Redis 網站上的 Redis 管線

在 ElastiCache 節點上有大量連線

如果 ElastiCache 節點上有大量 TCP 連線,那麼您可能會耗盡 maxclients 限制。當達到此限制時,您會收到「ERR 已達到最大用戶端數量錯誤」,並且可能會遇到連線逾時。

若要減少高延遲,最佳做法是追蹤 CurrConnectionsNewConnections CloudWatch 指標。您可以監控這些指標,以查看 ElastiCache 節點擁有的 TCP 連線數量。若要解決耗盡 maxclients 限制時出現的問題,請參閱大量連線一節,該節位於最佳做法: Redis 用戶端和 Amazon ElastiCache for Redis 中。

用戶端延遲問題

如果您為用戶端資源設定的逾時值過低,那麼您可能會收到逾時錯誤。若要判斷用戶端資源是否造成延遲問題,請檢查用戶端的記憶體、CPU 和網路使用率。如果這些資源接近其限制,請將用戶端逾時值設定為較大的值,以便資源能夠回應

如果您的應用程式在 Amazon EC2 執行個體上執行,那麼您可以使用 CloudWatch 指標來進一步識別問題。或者,在 Amazon EC2 執行個體內使用監控工具,例如 atopCloudWatch 代理程式

若要判斷是否為用戶端導致高延遲,請檢查以下問題:

  • 檢查逾時是否經常發生,或在一天中的特定時間發生。
  • 檢查是否在特定用戶端或多個用戶端上發生逾時。
  • 檢查是否在特定 Valkey 或 Redis 節點,或多個節點上發生逾時。
  • 檢查是否在特定叢集或多個叢集發生逾時。

Redis 同步處理

Redis 同步處理會在備份、節點更換和擴展事件時啟動。此程序是運算密集型工作負載,可能會導致延遲。

若要檢查同步處理是否影響節點效能,您可以檢查 CloudWatch 中的 SaveInProgress 指標。

**注意:**為了將對使用者流量的影響降到最低,最佳做法是將同步處理事件安排在離峰時段進行。

ElastiCache 叢集事件

如果您的 ElastiCache 叢集發生叢集事件,那麼您可能會在事件期間遇到高延遲。您可以使用 ElastiCache 主控台來查看延遲期間的事件。檢查是否存在背景活動,例如來自 ElastiCache 受管維護和服務更新的節點更換或容錯移轉事件。

如果您認為是意外的硬體故障導致高延遲,請聯絡 AWS Support

**注意:**您可以在 AWS Health 儀表板中查看排定的事件通知

範例事件日誌:

Finished recovery for cache nodes 0001
Recovering cache nodes 0001
Failover from master node cluster_node to replica node cluster_node completed

相關資訊

使用 Amazon CloudWatch 監控 Amazon ElastiCache for Redis 的最佳做法

持續的連線問題

如何在 ElastiCache for Redis OSS 或 ElastiCache for Valkey 叢集中啟用日誌傳送?

AWS 官方
AWS 官方已更新 1 個月前