我經歷了本文,其中解釋了檢查 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。