經過研究,仍對監控 RAM 使用感到困惑

經過研究,仍對監控 RAM 使用感到困惑

我經歷了本文,其中解釋了檢查 RAM 使用情況的各種方法。但是,我無法協調不同的方法,也不知道哪一種才是正確的。

當我第一次登入時,我會看到這樣的畫面:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

這對我來說表明我使用了 41% 的 RAM,這看起來相當高,因為伺服器沒有做太多事情。或者這個數字是否指的是 RAM 以外的其他東西?

接下來我試試看free -m方法:

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

根據文章中的解釋圖,這意味著我有 130MB 的已使用 RAM 和 459MB 的可用 RAM,這表明我使用了大約 22% 的 RAM。

接下來我運行top

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

這是最令人困惑的,因為摘要顯示我總共使用了 604M 中的 525MG,但是當使用“m”交互式命令按頂部內存排序時,頂部進程僅使用 0.3% 的內存? ?

最後,該ps命令似乎也顯示很少的記憶體使用量:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

我希望有人能糾正我造成這些明顯衝突的任何誤解。

謝謝!

編輯拉胡爾

輸出cat /proc/meminfo

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB

答案1

你只需要理解記憶體概念

根據 /proc/meminfo 的輸出,您只需要注意以下事項:

緩衝器:- 緩衝區是尚未「寫入」磁碟的東西。它表示有多少 RAM 專用於快取磁碟區塊。 「Cached」與「Buffers」類似,只是這次它快取檔案讀取的頁面

快取:- 快取是從磁碟「讀取」並儲存以供以後使用的東西。一般來說,您可以將快取區域視為另一個「空閒」RAM,因為如果應用程式需要更多內存,它會逐漸縮小。

只要理解「buffers」和「Cached」都代表系統快取的大小就足夠了。它們根據內部 Linux 核心機制的要求動態成長或收縮。

在 Webhosting,他們使用以下 cmd 清除快取:(主要在 cron 中配置):

sync && echo 3 > /proc/sys/vm/drop_caches

引用關聯

編輯另一項要求,即每個使用者的記憶體使用情況

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

請檢查上面的腳本並告訴我它是否正確顯示。

答案2

很好的答案@RahulPatil。

關於 ps 或 top 需要考慮的另一點如下

該工具 [exmap] 比 ps 或 top 更準確,因為它考慮了多個應用程式使用的共用程式庫。例如,如果兩個應用程式使用相同的共享庫,該共享庫佔用 1MB 內存,則 ps 將顯示兩個應用程式使用 1MB 的額外內存,而 exmap 更正確地顯示每個應用程式使用 500 KB。這種更高的準確性對於評估 KDE 和 GNOME 等桌面環境尤其重要,這些環境大量使用應用程式之間共用的程式庫。

透過ibm/developerworks/linux_memory

由於您的問題涉及無頭伺服器 - 我不確定 top 或 ps 實際上會有多少雙重報告。

答案3

我擔心我們可能會忽略顯而易見的事情,因為這對我們大多數人來說都是「理所當然的」。

Jonah,如果我錯了,請原諒我,但你的問題聽起來好像你可能沒有意識到所有這些值,特別是 CPU 使用率,通常會隨著時間的推移而變化很大。

當新進程啟動時,CPU 使用率可能會立即從個位數上升到 100%,但很快(希望)回落到 50% 以下的範圍。

記憶體使用情況變化較慢,但 Linux 嘗試透過執行「快取」磁碟存取的進程來使用未主動使用的記憶體。例如,它嘗試預測接下來需要從磁碟讀取什麼,例如讀取一部分後可能是大檔案的其餘部分,並將其預先載入到快取中。一些記憶體使用值包括進程使用的記憶體以及用於快取的記憶體。在已經運行了一段時間的系統上,兩者加起來可能會達到 80-90% 或更多。

還要考慮您運行的用於顯示使用情況的進程(例如 )top也使用 CPU 和記憶體。如果您編寫一個帶有循環的腳本來連續報告 CPU 使用情況,它幾乎肯定會始終顯示 100%,因為報告使用情況本身的行為(沒有 sleep 引入一些延遲)使用了所有 CPU。

相關內容