Amazon-Web-Services
在 AWS 上因高流量而失去數據庫連接 - 不知道從哪裡開始進行故障排除
我正在使用 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
好的,所以我認為我有幾個問題:
- 當我最初創建數據庫時,我製作了 t2.micros,預設情況下一次只允許 40 個連接。我後來將實例更改為 t2.mediums 但 max_connections 似乎保持不變。我在 t2.mediums 重新創建了數據庫,現在 max_connections 為 90,如果需要,我可以創建。
- 我誤讀了 Locust 文件,並且我已將測試設置為每 90 毫秒訪問一次站點,所以每 0.09 秒一次,這已經很多了。我只是將點擊時間增加到 3-10 秒(實際秒數),伺服器現在執行良好。
將 Locust 使用者增加到 200 會導致 75% 的故障(數據庫斷開連接)率,但我認為我可以進一步調整 max_connections,或者在站點前面放置一個 CDN(無論如何我都會這樣做)
@michael-sqlbot 在這裡獲獎,他帶領我走上了正確的道路。