如何解釋 Linux ’top’ 命令的輸出?
在HERE關於如何
PHP-FPM
消耗記憶體的討論之後,我發現在top
命令中讀取記憶體時出現問題。這是我top
剛重啟後的截圖PHP-FPM
。一切正常:大約 20 個PHP-FPM
程序,每個程序消耗 5.5MB 記憶體(佔總數的 0.3%)。
PHP-FPM
這是重新啟動之前(上次重新啟動後一天)的老化伺服器。在這裡,我們仍然有大約 25PHP-FPM
個記憶體使用量翻倍(10MB 佔總數的 0.5%)。因此,使用的總記憶體應為 600-700 MB。那麼,為什麼使用了 1.6GB 記憶體呢?
TL; 博士 1
您的伺服器位於某種 virtuozzo/openvz/ virtualization-du-jour容器中。試圖理解記憶體使用情況是在風車上傾斜。
TL; 博士 2
***Linux 吃掉了你的記憶體!***但沒關係,它對每個人都有效。
長篇大論
讓我們分解吧!
在該
Mem:
部分中,我們有:
$n total
:您機器中的物理 RAM 量$n used
:Linux消耗了多少記憶體,而不僅僅是程序的總和。$n free
: Linux 沒有消耗多少記憶體。這沒有考慮到記憶體和緩衝記憶體本質上是“免費的”。$n buffers
:緩衝區空間是儲存已讀取或等待寫入的磁碟 I/O 塊的位置。緩衝區是單個磁碟塊的 RAM 表示。在該
Swap:
部分中,我們有:
$n total
: 不言自明。可用於交換頁面的磁碟空間量。$n used
: 不言自明。使用了多少磁碟交換空間。$n free
: 赫普德普。$n cache
: 與上面的緩衝區密切相關。它實際上是頁面記憶體的一部分,它本身在物理磁碟上沒有空間。不要擔心這次談話的細節。當你跑步時,有趣的部分就來了
free -m
。你會看到三行,所有的數字都與頂部相關。我以我自己的電腦為例:total used free shared buffers cached Mem: 8070 7747 323 0 253 5713 -/+ buffers/cache: 1780 6290 Swap: 5055 0 5055
Mem 行顯示了以兆字節為單位的總 RAM(
$n total
在頂部)、使用了多少($n used
在頂部)、有多少空閒($n free
在頂部)、有多少是共享的(忽略它),現在是好部分!buffers
和列cached
與free -m
、可預測地$n buffers
和相關$n cache
。但看看以.free -m
開頭的第二行-/+ buffers/cache:
。數學表明使用的數量實際上是(總計)-((使用的緩衝區)-記憶體的)。免費是(總計)-(theNewUsed)。這是什麼意思呢?這意味著***Linux 吃掉了你的記憶體!***簡而言之,Linux 核心吞噬了 RAM,因為它可用於磁碟記憶體。除非您想嘗試編譯自定義核心,否則您無能為力。**專業提示:**不要。
RAM 確實存在並且免費供程序隨心所欲地使用。這就是
-/+ buffers/cache:
行中的意思free -m
。但是,您位於非 hyper-visor 虛擬化容器中,這使事情變得有點怪異。在這一點上,您根本無法以字節精度來評估您的記憶體。但是,您沒有看到任何非常不尋常的行為。保持冷靜並進行。此外,獲取物理伺服器(除非您喜歡看起來像 Kreskin 是您的系統管理員的記憶體統計資訊)。