我已經在伺服器上安裝了 Ubuntu 14.10。伺服器的主要任務是運行 MongoDB 安裝以及多個 NodeJS 應用程式。 NodeJS 應用程式將持續運行並接受來自外部的請求。
時不時會有大量請求出現,導致某些 NodeJS 應用程式在短時間內使用大量 RAM。我一直在努力監測這一情況,但不確定如何看待我的發現。
到目前為止,我已經使用了兩個命令來了解 RAM 使用情況。這些都是
free -m
和
sudo htop
第一個顯示了這一點:
total used free shared buffers cached
Mem: 3442 3158 283 6 111 1203
-/+ buffers/cache: 1842 1599
Swap: 0 0 0
當我看到這個時,我會說大約 280MB 的 RAM 是免費的。這看起來並不多。
htop 告訴我以下:
1 [||| 0.8%] Tasks: 61, 129 thr; 2 running
2 [||| 1.0%] Load average: 1.16 1.15 0.93
Mem[|||||||||||||||||||||||||||||||||||||1979/3442MB] Uptime: 29 days, 00:23:31
Swp[ 0/0MB]
我現在真的不知道如何閱讀這篇。有人可以幫我從這裡出去嗎?
我想我的問題最終歸結為這些:
- 如何了解可用 RAM 量?
- 什麼時候RAM記憶體太小? 300MB算不算小?這麼危險嗎?
答案1
長話短說:只要該-/+ buffers/cache
行顯示足夠的可用內存,您就不必擔心。如果它顯示可用記憶體較低並且您不斷被swap
寫入磁碟,那麼您需要擔心。
解釋:
您對目前的 RAM 使用情況感到滿意。讓我們把它的輸出free -m
分解:
所有列都是free -m
不言自明的。需要注意的重要一點是,當記憶體使用率很高而看不到快取和緩衝的記憶體量時,您不需要驚慌。
從輸出來看,您已經使用了 3442 MB RAM 中的 3158 MB,簡單的減法就會顯示您只有 283 MB 的空閒空間可指派給新程式。這是不對的,您還需要查看cached
和列,它們將顯示 RAM 快取的磁碟資料量,以便更快存取常用文件,並顯示要寫入磁碟的資料量。buffers
cached
buffered
如您所知,磁碟存取比 RAM 慢得多,因此為了提高效能,將一些磁碟資料儲存到 RAM 中是一件好事。您有 1203 MB 的快取資料和 111 MB 的緩衝資料。這是一件好事,您的內存可以緩存這麼多內存,而不只是保持這麼多 RAM 空閒。這將大大提高你的表現。
若要取得在沒有快取/緩衝的情況下正在使用的實際 RAM 量,請查看該-/+ buffers/cache:
行。顯示的結果是減去緩存/緩衝量。正如您所看到的,您有 1599 MB 的可用空間,因此在此狀態下一切似乎都正常。如果您看到該行中的值較低,那麼您需要注意並查看 RAM 使用情況。
另請注意,當要啟動新程式且快取後記憶體不足時,舊的快取將自動清除,為新程式騰出空間。因此,只要實際記憶體使用率不高,並且不斷地將記憶體交換到磁碟,那麼在快取中擁有大量記憶體是一件好事,因為它可以有效地「使用」記憶體。
答案2
heemayl 已經涵蓋了大部分有關實際可用記憶體的資訊。我在這裡的帖子只是幾個單行文字,您可以將其添加到您的.bashrc
別名中,以用作實際使用情況的快速概述:
free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x }'
和範例輸出:
$ free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x }'
Used 1.2G Out of 5.6G
如果您有興趣更深入地研究內存,請使用cat /proc/meminfo
,它列出了全部信息,並且這個部落格將幫助您了解free
命令如何從該文件計算內容。