Amazon-Web-Services

在 AWS 上因高流量而失去數據庫連接 - 不知道從哪裡開始進行故障排除

  • August 13, 2018

我正在使用 Elastic Beanstalk 在 AWS 上設計一個高度可用的 WP 站點,並使用 Locust 測試使用負載。

一切看起來都很好:我的 EC2 是 t2.mediums,自動擴展了 3-6 個可用區。負載均衡器設置為“跨區域”負載均衡(因此流量應分配到 3 個不同區域中的 3 台伺服器),我正在使用 Aurora (db.t2.medium) 和主 -> 只讀副本設置。

當我在瀏覽器中訪問該站點時一切正常,但是一旦我啟動 Locust(有 100-500 個使用者,90-100 秒等待時間,10 個使用者孵化率),我的站點幾乎會立即失去與數據庫的連接並最終拋出一個 50 倍的錯誤。

我的 Apache/PHP 設置是 Beanstalk(Amazon Linux AMI,php 5.6)開箱即用的,規格如下。opcache 預設啟用,但目前未安裝 phpfpm。

這是我的設置圖,然後是規格:

圖片

  • EC2
    • 3 t2. 培養基
    • 2 個 vCPU
    • 24 CPU 積分/小時
    • 4g 記憶體
  • 阿帕奇 2.4
  • PHP 5.6
    • upload_max_filesize => 64M
    • post_max_size => 64M
    • max_execution_time => 120
    • memory_limit => 256M
    • 操作記憶體
    • opcache.enable=1
    • opcache.memory_consumption=128
    • opcache.interned_strings_buffer=8
    • opcache.max_accelerated_files=4000

我不確定這是否是硬體配置問題,或者我是否需要調整 PHP/Apache/MySql

好的,所以我認為我有幾個問題:

  1. 當我最初創建數據庫時,我製作了 t2.micros,預設情況下一次只允許 40 個連接。我後來將實例更改為 t2.mediums 但 max_connections 似乎保持不變。我在 t2.mediums 重新創建了數據庫,現在 max_connections 為 90,如果需要,我可以創建。
  2. 我誤讀了 Locust 文件,並且我已將測試設置為每 90 毫秒訪問一次站點,所以每 0.09 秒一次,這已經很多了。我只是將點擊時間增加到 3-10 秒(實際秒數),伺服器現在執行良好。

將 Locust 使用者增加到 200 會導致 75% 的故障(數據庫斷開連接)率,但我認為我可以進一步調整 max_connections,或者在站點前面放置一個 CDN(無論如何我都會這樣做)

@michael-sqlbot 在這裡獲獎,他帶領我走上了正確的道路。

引用自:https://serverfault.com/questions/925848