Apache-2.2

需要改進apache和mysql的配置。目前配置由於 RAM 最大化而導致伺服器崩潰?

  • September 22, 2017

好的,我們執行一個不斷增長的汽車零元件購物車。我們的伺服器執行緩慢並且總是崩潰,所以我們要求我們的網路主機幫助我們。他們向我們發送了這些報告,但我需要一些關於如何處理它的建議。

我們現在的計劃是使用 MySQL 數據庫並將其託管在 AWS 上,但我需要知道如何衡量我們需要什麼大小的實例以及哪種服務最適合。

我還需要知道任何可以提高性能的 apache 調整。

這是網路主機發送給我們的分析

這些問題發揮作用的方式是:

  1. 您的 Web 應用程序程序的 RAM 佔用量非常大,超過 512M,加上對 Apache 的不當調整導致這些 Web 應用程序程序消耗的 RAM 比您的伺服器上可用的更多。

  2. Apache 伺服器上的 MySQL 服務經過調整,可以分配比伺服器上可用的 RAM 多得多的 RAM。這使得 MySQL 服務不穩定,因此需要重新啟動以修復如果正確調整為不使用比安裝更多 RAM 時不會發生的問題。

阿帕奇

您伺服器的 Apache MaxClients 設置是預設值 == 256

您的伺服器有 32232 MB 記憶體

最大的 Apache Web 應用程序程序使用 572.73 MB 記憶體

最小的 Apache Web 應用程序程序使用 35.02 MB 記憶體

平均 Apache Web 應用程序程序使用 94.93 MB 記憶體

按照平均 Apache 程序,Apache 可能使用 24302.09 MB RAM(可用 RAM 的 75.40%)

按照最大的 Apache 程序,Apache 可能會使用 146618.89 MB RAM(可用 RAM 的 454.89 %)

如果您僅將 100% 的伺服器 RAM 分配給 Apache Web 應用程序程序,則伺服器的 Apache MaxClients 設置不應大於 50。

最大潛在記憶體使用量:146618.88 MB(可用 RAM 的 454.89 %)

分配給 Apache 的 RAM 百分比 454.89 %

注意:此分析未考慮任何其他程序,例如在您的伺服器上執行的 MySQL 數據庫服務,這些程序也需要大量 RAM 資源才能有效執行,目前至少需要 1.2GB 的 RAM。

MySQL

-------- Performance Metrics -------------------------------------------------
[--] Up for: 14h 11m 51s (9M q [195.147 qps], 41K conn, TX: 22B, RX: 1B)
[--] Reads / Writes: 59% / 41%
[--] Total buffers: 1.6G global + 5.0G per thread (151 max threads)
[!!] Maximum possible memory usage: 756.7G (2403% of installed RAM)

[OK] Slow queries: 0% (2K/9M)
[OK] Highest usage of available connections: 23% (35/151)
[OK] Key buffer size / total MyISAM indexes: 1.0G/2.2G
[OK] Key buffer hit rate: 100.0% (9B cached / 1M reads)
[OK] Query cache efficiency: 90.4% (8M cached / 9M selects)
[!!] Query cache prunes per day: 725309
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 147K sorts)
[!!] Joins performed without indexes: 1544
[!!] Temporary tables created on disk: 47% (96K on disk / 203K total)
[OK] Thread cache hit rate: 99% (59 created / 41K connections)
[!!] Table cache hit rate: 5% (512 open / 10K opened)
[OK] Open file limit used: 1% (910/65K)
[OK] Table locks acquired immediately: 99% (2M immediate / 2M locks)
[!!] Connections aborted: 6%

建議的 MySQL 緩解措施:

執行 OPTIMIZE TABLE 對錶進行碎片整理以獲得更好的性能

減少整體 MySQL 記憶體佔用以提高系統穩定性

調整您的連接查詢以始終使用索引

臨時表大小已經很大 - 減少結果集大小

減少沒有 LIMIT 子句的 SELECT DISTINCT 查詢

您的應用程序未正確關閉 MySQL 連接讓您的開發人員修復程式碼,以便在返回查詢結果時顯式關閉 MySQL 連接。

如果您將 MySQL 和 Apache 託管在同一台伺服器上,只需將它們移動到不同的機器上,您就會看到性能提升。MySQL 喜歡使用 RAM 來記憶體數據,但如果您正在執行大量寫入(看起來不像您),您將不會看到大量改進。

您可能會考慮的其他事情是獲得一個負載平衡器並在其後面啟動兩個 Web 伺服器。這將使您獲得更小的實例並將風險分散一些。AWS 在給定的可用區域(如 1a、1b 等)中有多個區域,您可以讓您的數據庫位於 1a 中,而 mutli-az db 副本位於 1b 中,並且 Web 伺服器也位於區域中。如果 1a 出現故障,您會自動故障轉移到 1b。負載均衡器將確保您還可以在伺服器之間分配流量,這意味著過載的機會更少。

對於所有這些,我建議您嘗試以下方法

  • 執行mysqltuner並查看是否可以先調整數據庫。稍後您將需要此資訊來幫助調整您的 RDS 實例
  • 將您的數據庫放入 m3.medium 或 m3.large。請記住,如果您發現自己超載了,您可以隨時更改實例類型
  • 為您的 Web 伺服器使用兩個 m3.medium EC2 實例。負載平衡,我敢打賭它們的性能比你現在的單片伺服器要好。考慮使用像Opsworks這樣的伺服器配置系統來簡化設置。如果您發現您的伺服器超載,您可以隨時使用該腳本來按需啟動新伺服器並分擔負載。

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