如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體

業餘草發表於2018-09-20

檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體

檢視系統記憶體有很多方法,但主要的是用top命令和free 命令
當執行top命令看到結果,要怎麼看呢?這裡說明一下:
Mem: 666666k total, 55555k used,並不是代表你的應用程式已經使用了55555k的記憶體,這55555k是包含了:應用程式記憶體 + 緩衝 + 快取的記憶體的。
用free命令檢視更直接:
下面是一個例子(單位是MB): 

[root@linuxzgf ~]# free -m
                    total       used       free     shared    buffers     cached
Mem:          7982       6811       1171          0        350       5114
-/+ buffers/cache:       1346       6636
Swap:        16935         11      16924

在這裡例子中,應用程式只使用了1346MB記憶體,還有6636MB空閒記憶體可以使用. 
一些簡單的計算方法: 
物理已用記憶體 = 實際已用記憶體 - 緩衝 - 快取 = 6811M - 350M - 5114M

物理空閒記憶體 = 總實體記憶體 - 實際已用記憶體 + 緩衝 + 快取 

應用程式可用空閒記憶體 = 總實體記憶體 - 實際已用記憶體 

應用程式已用記憶體 = 實際已用記憶體 - 緩衝 - 快取

top命令的結果詳解
top命令 是Linux下常用的效能 分析工具 ,能夠實時顯示系統 中各個程式的資源佔用狀況,類似於Windows的任務管理 器。下面詳細介紹它的使用方法。

top - 02:53:32 up 16 days,  6:34, 17 users,  load average: 0.24, 0.21, 0.24
Tasks: 481 total,   3 running, 474 sleeping,   0 stopped,   4 zombie
Cpu(s): 10.3%us,  1.8%sy,  0.0%ni, 86.6%id,  0.5%wa,  0.2%hi,  0.6%si,  0.0%st
Mem:   4042764k total,  4001096k used,    41668k free,   383536k buffers
Swap:  2104472k total,     7900k used,  2096572k free,  1557040k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
32497 jacky     20   0  669m 222m  31m R   10  5.6       29:27.62 firefox
 4788 yiuwing   20   0  257m  18m  13m S    5  0.5          5:42.44 konsole
 5657 Liuxiaof  20   0  585m 159m  30m S    4  4.0          5:25.06 firefox
 4455 xiefc      20   0  542m  124m  30m R    4  3.1         7:23.03 firefox
 6188 Liuxiaof  20   0  191m   17m  13m S    4  0.5          0:01.16 konsole

統計資訊區前五行是系統整體的統計資訊。第一行是任務佇列資訊,同 uptime  命令的執行結果。其內容如下:

01:06:48  當前時間  
up 1:22  系統執行 時間,格式為時:分  
1 user  當前登入使用者 數  
load average: 0.06, 0.60, 0.48  系統負載 ,即任務佇列的平均長度。
            三個數值分別為  1分鐘、5分鐘、15分鐘前到現在的平均值。 

第二、三行為程式和CPU的資訊。當有多個CPU時,這些內容可能會超過兩行。內容如下:

Tasks: 29 total  程式總數  
1 running  正在執行的程式數  
28 sleeping  睡眠的程式數  
0 stopped  停止的程式數  
0 zombie  殭屍程式數  
Cpu(s): 0.3% us  使用者空間佔用CPU百分比  
1.0% sy  核心 空間佔用CPU百分比  
0.0% ni  使用者程式空間內改變過優先順序的程式佔用CPU百分比  
98.7% id  空閒CPU百分比  
0.0% wa  等待輸入輸出的CPU時間百分比  
0.0% hi     
0.0% si    

最後兩行為記憶體 資訊。內容如下:

Mem: 191272k total  實體記憶體總量  
173656k used  使用的實體記憶體總量  
17616k free  空閒記憶體總量  
22052k buffers  用作核心快取 的記憶體量  
Swap: 192772k total  交換區總量  
0k used  使用的交換區總量  
192772k free  空閒交換區總量  
123988k cached  緩衝的交換區總量。
            記憶體中的內容被換出到交換區,而後又被換入到記憶體,但使用過的交換區尚未被覆蓋,
            該數值即為這些內容已存在於記憶體中 的交換區的大小。
            相應的記憶體再次被換出時可不必再對交換區寫入。 

程式資訊區統計資訊區域的下方顯示了各個程式的詳細資訊。首先來認識一下各列的含義。

序號  列名  含義  
a  PID  程式id  
b  PPID  父程式id  
c  RUSER  Real user name  
d  UID  程式所有者的使用者id  
e  USER  程式所有者的使用者名稱  
f  GROUP  程式所有者的組名  
g  TTY  啟動程式的終端名。不是從終端啟動的程式則顯示為 ?  
h  PR  優先順序  
i  NI  nice值。負值表示高優先順序,正值表示低優先順序  
j  P  最後使用的CPU,僅在多CPU環境 下有意義  
k  %CPU  上次更新到現在的CPU時間佔用百分比  
l  TIME  程式使用的CPU時間總計,單位秒  
m  TIME+  程式使用的CPU時間總計,單位1/100秒  
n  %MEM  程式使用的實體記憶體 百分比  
o  VIRT  程式使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES  
p  SWAP  程式使用的虛擬記憶體中,被換出的大小,單位kb。  
q  RES  程式使用的、未被換出的實體記憶體大小,單位kb。RES=CODE+DATA  
r  CODE  可執行程式碼佔用的物理 記憶體大小,單位kb  
s  DATA  可執行程式碼以外的部分(資料 段+棧)佔用的物理 記憶體大小,單位kb  
t  SHR  共享記憶體大小,單位kb  
u  nFLT  頁面錯誤次數  
v  nDRT  最後一次寫入到現在,被修改過的頁面數。  
w  S  程式狀態。
            D =不可中斷的睡眠狀態
            R =執行
            S =睡眠
            T =跟蹤/停止
            Z =殭屍程式  
x  COMMAND  命令名/命令列  
y  WCHAN  若該程式在睡眠,則顯示睡眠中的系統函式名  
z  Flags  任務標誌,參考 sched.h 

預設情況下僅顯示比較重要的  PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND  列。可以通過下面的快捷鍵來更改顯示內容。
更改顯示內容通過 f 鍵可以選擇顯示的內容。按 f 鍵之後會顯示列的列表,按 a-z  即可顯示或隱藏對應的列,最後按Enter鍵確定。
按 o 鍵可以改變列的顯示順序。按小寫的 a-z 可以將相應的列向右移動,而大寫的 A-Z  可以將相應的列向左移動。最後按Enter鍵確定。
按大寫的 F 或 O 鍵,然後按 a-z 可以將程式按照相應的列進行排序。而大寫的  R 鍵可以將當前的排序倒轉。
top命令使用過程中,還可以使用一些互動的命令來完成其它引數的功能。這些命令是通過快捷鍵啟動的。
<空格>:立刻重新整理。
P:根據CPU使用大小進行排序。
T:根據時間、累計時間排序。
q:退出top命令。
m:切換顯示記憶體資訊。
t:切換顯示程式和CPU狀態資訊。
c:切換顯示命令名稱和完整命令列。
M:根據使用記憶體大小進行排序。
W:將當前設定寫入~/.toprc檔案中。這是寫top配置檔案的推薦方法。
可以看到,top命令是一個功能十分強大的監控系統的工具,對於系統管理員而言尤其重要。但是,它的缺點是會消耗很多系統資源。

居然檢視了記憶體,以下指令也會用到:
檢視CPU個數
# cat /proc/cpuinfo | grep "physical id" | uniq | wc -l
檢視CPU核數
# cat /proc/cpuinfo | grep "cpu cores" | uniq
檢視CPU型號
# cat /proc/cpuinfo | grep 'model name' |uniq
那麼,該伺服器有2個4核CPU,型號Intel(R) Xeon(R) CPU E5630 @ 2.53GHz

佔用記憶體的測量
測量一個程式佔用了多少記憶體,linux為我們提供了一個很方便的方法,/proc目錄為我們提供了所有的資訊,實際上top等工具也通過這裡來獲取相應的資訊。
/proc/meminfo 機器的記憶體使用資訊
/proc/pid/maps pid為程式號,顯示當前程式所佔用的虛擬地址。
/proc/pid/statm 程式所佔用的記憶體

業餘草微信公眾號

感謝您的關注!可加QQ1群:135430763,QQ2群:454796847,QQ3群:187424846。QQ群進群密碼:xttblog,想加微信群的朋友,可以微信搜尋:xmtxtt,備註:“xttblog”,新增助理微信拉你進群。備註錯誤不會同意好友申請。再次感謝您的關注!後續有精彩內容會第一時間發給您!原創文章投稿請傳送至532009913@qq.com郵箱。商務合作可新增助理微信進行溝通!

相關文章