![即使設定較輕,VPS 記憶體也會耗盡](https://rvso.com/image/568261/%E5%8D%B3%E4%BD%BF%E8%A8%AD%E5%AE%9A%E8%BC%83%E8%BC%95%EF%BC%8CVPS%20%E8%A8%98%E6%86%B6%E9%AB%94%E4%B9%9F%E6%9C%83%E8%80%97%E7%9B%A1.png)
Linux菜鳥在這裡。我在 Ubuntu 11.04 伺服器上有一個 256MB VPS,當我執行「free -m」時,結果顯示所有記憶體正在使用(包括第二行 re: buffers/cache)。我發現這很奇怪,考慮到我只有 5 個運行的 Apache 進程,每個進程佔用大約 20MB 的空間。 MYSQL 佔用 30MB。據我所知,根據“top”,我沒有其他佔用記憶體的操作。
可能相關的設定:
PHP memory_limit = 32M
MYSQL key_buffer = 16M
Prefork MPM Maxclients = 10
因此,當我查看這些設定時,我自然認為maxclients 太高,因此我嘗試將其切換為5。獲得任何流量除了我現在的情況。我不明白這一點。我認為單一 Apache 進程會處理在「KeepAliveTimeout」視窗內收到的來自客戶端的所有請求,我將其設為 2 秒。用我的初始配置。在 10 個最大客戶端中,我的頁面載入時間約為 0.3 毫秒,因此單一進程應該可以處理這個問題,對嗎?
接下來,我將 maxclients 設為 1 的極限水平。我的記憶體仍然處於 100% 使用率,而且我的網站載入速度非常慢。我是一個菜鳥,在這裡完全不知所措。根據我讀過的許多有關基本伺服器設定的教程,我應該可以開始了。
幫助!請!
Edit:
total used free shared buffers cached
Mem: 256 256 0 0 0 0
-/+ buffers/cache: 256 0
Swap: 0 0 0
答案1
這是因為 Linux 使用大部分記憶體作為緩存,並根據需要將部分記憶體傳回給您運行的任何應用程式。
所以不要驚慌。你沒事。將 MaxClients 更改回預設值。
編輯:看起來您正在 OpenVZ 上運行。請參閱下面大衛·施瓦茨的回應。
答案2
沒有交換區,這使得作業系統很難節省實體記憶體。基本上,它沒有地方放置可能永遠不會被存取但無法證明永遠不會被存取的資料。所以它別無選擇,只能將其保存在 RAM 中。
例如,考慮一個在伺服器啟動時啟動的服務,但從未被存取過。它可能連結到重新定位的庫。此重定位會弄髒記憶體中的代碼頁。啟動時,它可能會分配一些記憶體並修改其內容。使用交換區,在服務長時間不運行後,或記憶體緊張時,可以將這些頁面從記憶體中逐出並儲存在交換區中。 (很可能永遠不會被檢索,但核心不能冒這個風險——考慮像這樣的服務ssh
!)
如果沒有交換,核心就無法驅逐髒頁,即使它們已經好幾天沒有被存取了。因此,寶貴的實體記憶體被無用的垃圾填滿了。
更新:顯然,這是 OpenVZ 的神器。有交換,你看到的記憶體數字是沒有意義的。您的效能問題可能是或可能不是由您控制的任何事情引起的。