Vps

如何減少mediawiki的記憶體使用?

  • January 2, 2013

我有一個執行 apache 的 VPS,它在 Dreamhost 上總是記憶體不足。Dreamhost 說問題出在 wordpress 配置上,但我認為這是他們的標準答案。我看過了,主要的網路託管來自 mediawiki。我有時會執行 20-30 個 http 程序,它們都在執行 php,而 mediawiki 正在為我的前兩個站點提供支持。

因此,我正在尋找有關減少 mediawiki 記憶體佔用的方法的建議。我目前正在執行版本 1.16.4,我發現它明顯落後於目前版本。(Dreamhost 應該為我升級它,但顯然他們沒有。)

  • 版本 17.2 的佔用空間是否低於 16.2?
  • 有沒有一種聰明的方法可以使用記憶體來減少記憶體量?
  • 是否有會減少記憶體的配置選項?
  • 為什麼我同時執行 apache httpd 和 php5.cgi?
  • 有沒有一種簡單的方法可以找出哪些 mediawiki 部分使用的記憶體最多?
  • 有沒有辦法減少獲取的文件數量?我的網路日誌充滿了對 user.gif、bullet.gif、external.png、document.png 的提取 — 為什麼 mediawiki 的主題不使用 sprite?

謝謝!

我的第一個建議是確保您正在解決正確的問題。

  • 在合理的時間範圍內跟踪您的記憶體使用情況並查看它的使用量(以及是否可以將其與流量增加等相關聯)。

    • 如果您已經進行了一些監控(例如 Munin),您應該能夠看到記憶體趨勢
    • 否則,請使用 sar(例如,如果您已經設置了它, sar -r -f /var/log/sa/sa17 將為您提供今天的記憶體資訊)。

確定哪些程序實際上正在使用您的記憶體。

  • 您的問題可能與 MediaWiki 沒有直接關係。雖然 PHP 可能會消耗大量記憶體,但 MySQL 尤其是 Apache 是佔用大量記憶體的良好候選者。

    • 使用 top(或 htop)或 ps aux –sort -rss 查看哪些程序消耗的記憶體最多。
    • 如果您的問題是 PHP,您可能會成功減少 php.ini 中的 memory_limit

減少 Apache 的記憶體使用

  • 20 到 30 個 apache 程序會消耗大量記憶體(可能超過 500MB)

  • 如果可以,請從 Apache 切換到輕量級 Web 伺服器,例如 nginx 或 lighttpd。這些應該適用於大多數 CMS,儘管不支持某些配置(例如使用 .htaccess 文件)。

  • 消除您不需要的 apache 擴展 - Apache 將為它處理的每個請求載入一個幾乎完整的自身副本 - 包括所有擴展等 - 到記憶體中。

  • 減少 Apache 產生的伺服器程序的數量。Apache 程序通常開始時每個大約 10MB,隨著使用可以增加到每個 30+MB。

    • 如果可以接受一段時間的停機,請考慮以下方法(否則只需估計並進行數學計算):

      • 使用幾個小時後,查看 Apache 程序使用的平均記憶體
      • 停止 Apache 並記下您使用的記憶體 - 這應該告訴您您的作業系統和所有正在執行的服務(MySQL 等)需要多少。重啟阿帕奇
      • 取你的總記憶體和你的基本系統使用的記憶體之間的差異,為了安全起見減去一點(至少 10%),然後除以你的平均 apache 程序大小。
  • 為 StartServers、MinSpareServers、MaxSpareServers 和 MaxClients 設置較低的值。保持 MaxClients 低於您在上面計算的數字,並且其他值仍然更低。

  • 將 MaxRequestsPerChild 設置為非零值(100-300 應該不錯)

  • 使用較少的伺服器程序,您不希望任何時間太長 - 因此請確保您的 KeepAliveTimeout 較低(10 秒應該足夠,可能更低,不超過 15 秒 - 該值取決於您的站點的使用方式)

在這個非常好的針對低記憶體優化 Apache 的指南中還有其他建議。

版本 17.2 的佔用空間是否低於 16.2?

  • 這些之間實際上只有 6 個版本(16.2-16.5、17.0-17.2),而且,次要版本通常是安全更新 - 所以我不希望有重大變化,除了 17.0 版本(快速查看更新日誌不建議對記憶體管理進行任何重大更改)。如果您真的認為是問題所在,請啟動虛擬機(例如使用 VirtualBox),安裝兩個版本,然後對它們進行負載測試(ab、siege、httperf 等)——監控記憶體使用情況並比較結果。

有沒有一種聰明的方法可以使用記憶體來減少記憶體量?

  • 這取決於您的問題的根源是什麼:

    • 如果是 PHP,則在頁面更改時生成頁面的靜態副本,並提供這些副本。

    • 如果您的問題出在 Apache 上,那麼提供靜態資源仍然需要大量記憶體(儘管記憶體始終是一個好主意)。

      • 您可以使用 CDN 來減少對靜態資產的請求 - 這應該有助於 Apache 上的記憶體使用。

您可以考慮一些不太理想的選擇:

  • 使用輕量級伺服器作為反向代理 - 這將有助於處理靜態請求,如果這些請求佔您請求的很大一部分,則應該有助於記憶體使用(在 Apache 適當調整之後) - 但是,執行額外的伺服器會使用一些額外的記憶體(並增加了系統的複雜性)。
  • 使用諸如 Varnish 之類的記憶體層 - 通常這是為了從記憶體中執行 - 以使用更多記憶體為代價更快地提供頁面 - 但是,您可以將其設置為使用文件作為記憶體。就像使用反向代理一樣,這將減少後端的負載,但它本身需要一些記憶體 - 如果您準備進行實驗,您可以查看收益是否抵消了成本。
  • 驗證您的操作碼記憶體(例如 APC)是否正常工作,並可能使用文件支持的儲存而不是記憶體來儲存記憶體。

為什麼我同時執行 apache httpd 和 php5.cgi?

  • 可能是因為您使用的是 FastCGI。對 PHP 文件的請求不是由 Apache(如 mod_php 的情況)執行的,而是由 PHP 的 CGI 介面執行的。您可能會發現另一個 CGI 介面 - PHP-FPM - 提供了更好的資源管理(它可以與 mod_fastcgi 一起使用)。

有沒有一種簡單的方法可以找出哪些 mediawiki 部分使用的記憶體最多?

  • 我建議實現這一點的最佳方法是禁用任何你可以禁用的東西(擴展/外掛等)並執行負載測試。您可能在使用某些分析器(例如 XDebug)方面取得了一些成功,但我不希望結果會那麼容易採取行動(而且通常更傾向於花費時間)。如果您的請求需要很長時間才能執行,一些流程管理器(例如 PHP-FPM)會提供“慢日誌”功能。

有沒有辦法減少獲取的文件數量?我的網路日誌充滿了對 user.gif、bullet.gif、external.png、document.png 的提取 — 為什麼 mediawiki 的主題不使用 sprite?

  • 您可以查看 Google 的 mod_pagespeed - 它會幫助您縮小、優化圖像等 - 儘管正確設置確實需要一些努力。除此之外,您可以根據自己的喜好修改主題或使用其他主題。確保圖像等被您使用者的瀏覽器記憶體。可能減少某些類型資產(例如靜態對象)的日誌記錄

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