我的網路伺服器應該有多少可用記憶體?
我有一個目前託管兩個 Wordpress 站點和一些基於 Java 的協作軟體的網路伺服器。伺服器有 2G 記憶體,目前使用的可用記憶體大約為 1.8G。現在這裡幾乎是一個試點項目,它的流量可以忽略不計,所以我認為很明顯我需要更多的記憶體。
我想知道,如果我要釋放它,我如何根據它獲得的流量來預測我的記憶體需求。我在Google上四處尋找,我發現的東西有點脆弱。在計算記憶體需求作為伺服器上的基本(無流量)負載的函式時,是否應該使用一種很好的啟發式方法?
作為參考,
free -m
可以在下面看到輸出:total used free shared buffers cached Mem: 2048 1832 215 0 0 0 -/+ buffers/cache: 1832 215 Swap: 0 0 0
對我來說,這看起來像是實際使用的記憶體,而不是由於記憶體或其他任何原因造成的錯覺。
我認為我的協作軟體的需求必須經過實驗測試,所以這裡
free -m
沒有執行該軟體:total used free shared buffers cached Mem: 2048 1109 938 0 0 0 -/+ buffers/cache: 1109 938 Swap: 0 0 0
我的計劃 B 解決這個問題是向伺服器添加一堆交換空間,給它一些流量並根據交換使用的數量進行調整。我只是想知道是否有人有一個好的經驗法則來估計我應該提前計劃多少記憶體……或者我的想法是否瘋狂。
提前非常感謝(我對此真的很陌生)。
答案基本上是:視情況而定。在您的具體情況下,您安裝的網站的質量和效率可能會受到質疑。
例如,這週我在一個流量相對適中的伺服器上工作,但佔用了 4GB 的 RAM。在進行程式碼審查之後——整個網站都在使用類似於 WordPress 的現成 CMS,但具有自定義功能——我們發現了一個主要瓶頸。一旦我們將問題重新編碼,伺服器現在平均每天使用大約 2GB 的 RAM。RAM 使用率下降 50%!
我不建議使用拆分伺服器以使用 Ngnix 和 Apache 之類的操作。只需使用 Apache。平衡兩台不同伺服器的配置的麻煩不值得邊際收益。阿帕奇很好。但話雖如此,您應該在同一個盒子中考慮您的 WordPress PHP 網站、Java 應用程序和 MySQL。根據我的經驗,您應該執行以下操作:
- 正確配置 Apache: Apache 是一個很好的軟體,但開箱即用它是一個記憶體豬。例如,我相信預設是允許每秒 255 個連接?我可以向你保證,大多數簡單的網站在好日子裡每秒幾乎不能獲得 40 個連接。因此,將 Apache 調整為適合您的流量會有所幫助。此外,
KeepAlive
Apache 中有一個設置非常好用!但是開箱即用,我相信它被設置為MaxKeepAliveRequests
100,這是相當瘋狂的。我通常將其設置為大約 30 個連接,KeepAliveTimeout
時間為 2 到 3 秒。關鍵是要具有與KeepAliveTimeout
平均頁面下載所需的速度相匹配的速度,並為成本/速度留出一點空間。因此,如果頁面在 1 秒內載入,請執行KeepAliveTimeout
2 秒。- **檢查您的 WordPress 網站的程式碼是否存在潛在瓶頸:**專注於它的 PHP 核心並清除您可以做的事情。注意過多的 MySQL 呼叫和文件系統呼叫。這是您可以讓應用程序飛起來的地方!另外,檢查
memory_limit
你的php.ini
並確保它沒有高於必要的值。預設為 64M,但在很多情況下可以降低到 32M。- **MySQL 調整或將其移動到它自己的伺服器上:**在上面寫過 MySQL 之後,我意識到您可能將 MySQL 實例託管在同一個機器上。通過執行諸如MySQL 調整入門之類的腳本來研究優化 MySQL 性能。如果不進行調整,MySQL 將耗盡所有資源並導致系統癱瘓。通過調整,MySQL 將執行得更好/更快,並且可以釋放資源用於其他目的。此外,考慮將您的 MySQL 數據庫移動到獨立伺服器。您可能需要學習如何正確地對伺服器進行網路連接和防火牆,以允許您的伺服器訪問但防止黑客攻擊,但性能優勢將是巨大的。
- **考慮將 Java 應用程序移至另一台伺服器:**我的經驗法則是每台伺服器一個主要的 Java 應用程序。一般來說,與 WordPress 等 PHP 設置相比,Java 應用程序可能會佔用大量記憶體。通過為 Java 應用程序提供它自己的伺服器來使用,WordPress 網站會更快樂。
關於 MySQL 調整,一開始可能需要幾週時間才能確定。調整腳本的原因是基於 MySQL 看到的真實流量。因此,您基本上讓您的網站向全世界開放,等待 2 天(至少),執行調整腳本,然後再等幾天再調整一些。大約一周後,您應該能夠調整 MySQL 以使其與您的設置一樣好。