Apache-2.2

Web 伺服器上的交換空間用完,該怎麼辦?

  • October 6, 2019

我有 2 個 LAMP Web 伺服器,它們經常用完交換空間(請參閱隨附的頂部螢幕截圖)。

Apache的設置如下:

<IfModule prefork.c>
啟動伺服器 64
MinSpareServers 64
MaxSpareServers 128
伺服器限制 256
最大客戶數 256
MaxRequestsPerChild 4096
</IfModule>

PHP 的資源限制是:

max_execution_time = 30
最大輸入時間 = 30
memory_limit = 80M

我是這樣的伺服器管理新手(我是開發人員);我可以調整什麼以防止交換?

這是崩潰時其中一台伺服器上的頂部螢幕截圖:截屏

你的交換空間用完了,因為你正在使用所有的 RAM,然後是一些。你有一個嚴重的問題需要立即糾正。

您有兩個選擇:忽略原因並添加更多 RAM,或者針對實際佔用記憶體的問題。

如果它是您的伺服器,添加 RAM 相當便宜且相當容易,但它是一個臨時修復,如果它是 VPS 或租用伺服器,它並不那麼便宜。讓我們嘗試解決根本問題。這麼多記憶體在吸什麼?這裡有一些提示:

  • 在 MySQL 中關閉 InnoDB(除非你需要它)
  • 使用配置棒 +5擊敗 Apache(和 MySQL)
  • 考慮一個較小的 httpd,如 cherokee、lighttpd 或 nginx(它們非常快並且幾乎不吃 RAM)。主要缺點是您不能使用.htaccess文件,但您可以對其功能進行硬編碼。
  • 你在使用 PHP 的 OP-code 記憶體嗎?嘗試將其關閉或切換到另一個更有效的。

就僅將交換項目恢復到真實 RAM 而言,您可以通過以下方式做到這一點:

swapoff -a && swapon -a

但是,當您的可用記憶體少於交換中的內容時,請不要嘗試。它會使你的伺服器崩潰。

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