Linux
Debian VPS 中奇怪的記憶體峰值
我執行一個中型 VPS(4GB RAM)作為 Web 伺服器。我使用 Apache 和 mod_passenger 託管一些私有 Ruby on Rails 站點。我還有兩個使用“獨立乘客”執行的遺留應用程序(兩個 Nginx 伺服器,埠 3000 和 4000 上有乘客)。Apache 充當這些代理。
大多數情況下,這是可以正常工作的,但每隔幾個月整個系統就會發瘋:
- RAM 使用率高達 100%
- 日誌文件充滿“無法分配記憶體”和反向代理錯誤
- 很快整個系統就沒有反應了
有時這會自行解決,有時我不得不要求我的提供商重新啟動系統,因為我什至無法通過 SSH 進入它。
這總是發生在晚上,當流量非常低時。下面是兩張圖:
Apache 訪問
記憶體消耗
**我該如何深究?**我可以採取哪些步驟來調試這種情況?是否有可能我的機器上有一個壞鄰居?
主要機器上的其他程序:MySQL、PostgreSQL、Elasticsearch、Redis
更新澄清
我正在尋找一種工具來記錄程序及其記憶體和 cpu 消耗,以便我可以追踪麻煩製造者。那裡有類似的東西還是我必須自己動手?
根據我管理 RoR 應用程序的個人經驗,記憶體洩漏很容易蔓延,並且可以在大多數意想不到的時間抓住你。我建議做兩件事來抓住罪魁禍首:
- 使用sar記錄系統活動。
- 由於記憶體是特定的目標,如果門檻值超過您選擇的某個限制,請
free | grep "Mem:" | awk '{print $4}'
使用並向您自己發送郵件。mailx
通常有一個錯誤的 sql 查詢或一個 rouge gem 會導致這種情況。如果最近在這些方面發生了任何變化,那麼您可能也想調查一下。