linux基礎命令-查看系統狀態-free -m以及top命令詳解

博文說明【前言】:

    

    本文將通過個人口吻介紹Linux下的free命令及top命令的相關知識,在目前時間點【2017年6月19號】下,所掌握的技術水平有限,可能會存在不少知識理解不夠深入或全面,望大家指出問題共同交流,在後續工作及學習中如發現本文內容與實際情況有所偏差,將會完善該博文內容。


本文參考文獻引用鏈接:

 1、http://www.cnblogs.com/imapla/archive/2013/02/15/2912752.html 【好文】
2、http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html【必看,博主創新的使用數組方式講解,相當不錯】
3、http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316438.html
4、http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages【講解top命令的系統負載,必看必看】
5、https://www.oschina.net/question/234345_42647【CPU部分講解非常詳細】
6、http://blog.csdn.net/dxl342/article/details/53507673
7、
http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316399.html



正文:


 一:free命令


free命令是顯示的當前內存的使用,-m的意思是M字節來顯示內容,應該是大家使用最頻繁的命令之一,不多說,我們來一起看看

weblogic@YDCK-APP11:~> free -m 
                     total           used           free     shared    buffers     cached
Mem:          15953          15168            785          0        668       8000
-/+ buffers/cache:           6499           9453
Swap:           8189             58               8131
weblogic@YDCK-APP11:~> 


參數講解:

第一部分(Mem):


total                     物理內存總量: 15953M
used                     已用物理內存量: 15168M
free                      空閒物理內存量: 785M
shared                  當前已經廢棄不用,總是0
buffers Buffer       讀寫緩衝內存區總量:668M
cached Page         緩存內存區總量:8000M

講解:
第一部分的輸出是從操作系統(OS)層面來看的。
也就是說,從OS的角度來看,計算機上一共有:15953M(缺省時free的單位爲KB)物理內存;
在這些物理內存中有15168M被使用了;還用785M是可用的;
數學關係:total(15953M) = used(15168M) + free(785M)


第二部分(-/+ buffers/cache):


(-buffers/cache) used內存數:6499M (指第一部分Mem行中的used – buffers – cached)
(+buffers/cache) free內存數: 9453M (指第一部分Mem行中的free + buffers + cached)

講解:
free輸出的第二部分是從應用程序的角度看系統內存的使用情況。

-buffers/cache:也就是used-buffers-cache,表示當前系統中實際被程序吃掉的內存;
+buffers/cache:也就是free+buffers+cache,表示當前系統中還可以挪用分配給程序的實際內存總數;

關於這部分內容,相信應該會有不少人和我之前一樣存在疑惑,希望大家現在能看明白。第一部分是OS角度,第二部分是應用程序角度,實際應用中,我們主要看這一部分。

第三部分(Swap):
交換分區,這塊就不說了,大家都很清楚

補充:buffers與cached的區別

A buffer is something that has yet to be “written” to disk.
A cache is something that has been “read” from the disk and stored for later use 

對於應用程序來說,buffers/cached 是等於可用的,因爲buffer/cached是爲了提高文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached會很快地被回收。
所以從應用程序的角度來說 可用內存=系統free memory+buffers+cached.

buffers是指用來給塊設備做緩衝,存放即將要被處理的數據
cached是用來給文件做緩存(速度優於內存),存放已經被處理完畢的數據,如果有請求再次請求這些數據,就不用重新生成,能直接返回這些數據。

也就是說:buffers是用來存儲接受的數據,而cached是用來保存我們處理完畢的數據

示例:
一個程序一次只能處理10KB數據,爲了提升程序的處理效率,系統在內存中劃分出緩衝區,大小爲10KB,存放下一次要處理的輸入數據,那麼這也就意味着,程序不需要等待客戶端的數據輸入,處理完之後再拿數據接着處理,這裏也就是緩衝的概念。
10KB的數據處理完了之後,我們把結果返回給客戶端之後,系統同時在內存中劃分出緩存區,把結果保存內存中,後續有相同的數據請求時(也就意味着會產生相同的結果),我們直接把在內存中的這個結果返回給客戶端,而不需要再重新計算生成結果。

二:top命令

TOP是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態.如果在前臺執行該命令,它將獨佔前臺,直到用戶終止該程序爲止.比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表.該命令可以按CPU使用.內存使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過交互式命令或者在個人定製文件中進行設定.

top - 18:41:57 up 631 days,  5:52,  2 users,  load average: 0.40, 0.40, 0.43
Tasks: 161 total,   1 running, 160 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.2%us,  0.2%sy,  0.0%ni, 97.5%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:     15953M total,    15259M used,      694M free,      669M buffers
Swap:     8189M total,       58M used,     8131M free,     8090M cached

  PID USER      PR  NI  VIRT  RES  SHR S   %CPU %MEM    TIME+  COMMAND                                                                                                                        
 3720 weblogic  20   0 6158m 4.7g  32m S     18 30.3   1414:00 java                                                                                                                            
 3657 weblogic  20   0  4004  528  436 S      1  0.0  48:07.16 cronolog                                                                                                                        
13241 weblogic  20   0  8920 1168  828 R      0  0.0   0:00.45 top                                                                                                                             
    1 root      20   0 10540  736  700 S      0  0.0   5:13.87 init                                                                                                                            
    2 root      20   0     0    0    0 S      0  0.0   0:19.24 kthreadd                                                                                                                        
    3 root      20   0     0    0    0 S      0  0.0   7:19.45 ksoftirqd/0                                                                                                                     
    6 root      RT   0     0    0    0 S      0  0.0   0:39.72 migration/0                                                                                                                     
    7 root      RT   0     0    0    0 S      0  0.0   2:12.06 watchdog/0                                                                                                                      
    8 root      RT   0     0    0    0 S      0  0.0   0:52.89 migration/1                                                                                                                     
   10 root      20   0     0    0    0 S      0  0.0   1:54.42 ksoftirqd/1                                                                                                                           
   ...省略下方輸出...


參數講解:

第一部分(top,全局信息):

18:41:57                                     #當前系統時間
up 631 days,  5:52                     #系統開機運行時間爲631天5小時52分
2 users                                       #當前登錄用戶數
load average: 0.40, 0.40, 0.43    #系統負載,即任務隊列的平均長度。 三個數值分別對應爲1分鐘、5分鐘、15分鐘前到現在的平均值。

load average數據是每隔5秒鐘檢查一次活躍的進程數,然後按特定算法計算出的數值。

這個參數跟服務器的虛擬CPU(也就是處理器的核心)數量有關,一個虛擬CPU對應的一個值範圍是0-1,多個虛擬CPU是累加的關係。也就是說,比如我現在就一個虛擬CPU,當前的系統負載的值爲1,那就意味着,我的系統處於完全開工狀態,也就是使用了全部的容量,我們可以把系統負載比作一條道路,再跑的活躍的程序就相當於在這條路上奔跑的汽車,當值位1的時候,就意味着我這條路上已經跑滿了車,如果值爲2的數,那麼剩下的一倍容量(汽車)就需要等待當前的進程都處理完了之後,才能進入這條道路。

多處理器(CPU)系統中,和處理器的總核心數量掛鉤,1表示單核(單車道)的滿負載,2表示雙核(雙車道)的滿負載,3表示3核心(三車道)的滿負載。

注意:處理器數量和核心數量是兩個不同的概念東西。一個處理器中可以包含多個處理器核心,而我們在這裏使用的參數的處理器核心,而不是處理器個數,一定要注意。


第二部分(Tasks,進程信息):

161 total                    #系統已經加載的進程總數(161個)
1 running                   #處於運行狀態的進程數量(1個)
160 sleeping              #處理休眠狀態的進程數量(160個)             
0 stopped                  #處理停止狀態的進程數量(0個)              
0 zombie                   #處理殭屍狀態的進程數量(0個)


第三部分(Cpu(s),cpu信息)

Cpu(s):  2.2%us,  0.2%sy,  0.0%ni, 97.5%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st

這裏各個參數值顯示的都是百分比。

點數字鍵1可以展開或合上多個CPU, 如下:
    Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu1  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

us  -- User CPU time-【用戶空間佔用CPU百分比】
    CPU花在未調整優先級的(not niced)用戶進程的時間。
    The  time  the  CPU  has spent running users’ processes that are not niced.

    注: nice 命令: 調整程序運行的優先級(範圍 -20 到 19,越大,優先級越高)
sy  --  System CPU time-【內核空間佔用CPU百分比】
    CPU花在內核及其進程上的時間。
    The time the CPU has spent running the kernel and its processes.

ni  --  Nice CPU time    CPU花在調整過優先級的(niced)用戶進程的時間。
    The time the CPU has spent running users’ proccess  that  have  been niced.

id  --  ? time    CPU花在空閒等待的時間,也就是空閒CPU百分比

wa  --  iowait-【等待輸入輸出的CPU時間百分比】
    等待I/O結束的CPU時間。
    Amount of time the CPU has been waiting for I/O to complete.

hi  --  Hardware IRQ-【硬件CPU中斷佔用百分比】
    CPU花在硬件中斷的時間。
    The amount of time the CPU has been servicing hardware interrupts.

si  --  Software Interrupts-【軟中斷佔用百分比】
    CPU花在軟件中斷的時間。
    The amount of time the CPU has been servicing software interrupts.

st  --  Steal Time-【虛擬機佔用百分比】
    The amount of CPU ’stolen’ from this virtual machine by the hypervisor for other tasks (such
 as running another virtual machine).

第四部分(MEM-內存信息)

15953M total                 #物理內存總量
15259M used                 #已使用的物理內存總量
694M free                      #空閒的物理內存總量(不包括緩存和緩衝區)
669M buffers                 #buffer緩存區使用的內存總量

第五部分(Swap,交換分區信息)

8189M total                    #交換分區的總量      
58M used                       #已使用的交換分區總量
8131M free                     #空閒的交換分區總量            
8090M cached                #cached緩存區的交換區總量,這個值按道理用該放在第四部分,實際佔用的空間是物理內存,意義請參考前面的free命令,放在第五行是爲了美觀。

第六部分(進程信息)

  PID USER      PR  NI  VIRT  RES  SHR S   %CPU %MEM    TIME+  COMMAND                                                                                                                        
 3720 weblogic  20   0 6158m 4.7g  32m S     18 30.3   1414:00 java                                                                                                                            
 3657 weblogic  20   0  4004  528  436 S      1  0.0  48:07.16 cronolog                                                                                                                        
13241 weblogic  20   0  8920 1168  828 R      0  0.0   0:00.45 top 
    ...省略...

PID                     #進程ID
USER                  #進程所有者
PR                      #進程優先級
NI                       #nice值,負值表示高優先級,正值表示低優先級
VIRT                   #進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES                    #進程使用的,未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR                   #共享內存大小,單位kb
S                        #進程狀態(D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=殭屍進程)
%CPU                #進程啓動後所佔用的CPU時間百分比,單位1/100秒
%MEM               #進程使用的物理內存百分比
TIME+                #進程使用的CPU時間總計
COMMAND        #任務名稱


序號  列名    含義
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 即可顯示或隱藏對應的列,最後按回車鍵確定。 
按 o 鍵可以改變列的顯示順序。按小寫的 a-z 可以將相應的列向右移動,而大寫的 A-Z 可以將相應的列向左移動。最後按回車鍵確定。 
按大寫的 F 或 O 鍵,然後按 a-z 可以將進程按照相應的列進行排序。而大寫的 R 鍵可以將當前的排序倒轉。

top命令補充:

命令格式:top [-] [d] [p] [q] [c] [C] [S] [s]  [n]

d 指定每兩次屏幕信息刷新之間的時間間隔。當然用戶可以使用s交互命令來改變之。 
p 通過指定監控進程ID來僅僅監控某個進程的狀態。 
q 該選項將使top沒有任何延遲的進行刷新。如果調用程序有超級用戶權限,那麼top將以儘可能高的優先級運行。 
S 指定累計模式 
s 使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。 
i 使top不顯示任何閒置或者僵死進程。 -【這個比較有用】
c 顯示整個命令行而不只是顯示命令名  -【這個比較有用,組合使用,top -ic】

NTP-slave:~ # top -ic
top - 07:15:19 up 5 days,  1:58,  2 users,  load average: 0.30, 0.18, 0.10
Tasks: 118 total,   1 running, 117 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.2%sy,  0.0%ni, 99.5%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1910720k total,  1809476k used,   101244k free,   200864k buffers
Swap:  4192252k total,        0k used,  4192252k free,  1506872k cached

   PID USER      PR  NI  VIRT  RES  SHR S   %CPU %MEM    TIME+  COMMAND                                                                                                                       
 47347 root      20   0  8916 1112  808 R      2  0.1   0:00.01 top -ic 

其他實用命令
下面介紹在top命令執行過程中可以使用的一些交互命令。從使用角度來看,熟練的掌握這些命令比掌握選項還重要一些。這些命令都是單字母的,如果在命令行選項中使用了s選項,則可能其中一些命令會被屏蔽掉。

Ctrl+L 擦除並且重寫屏幕。 
h或者? 顯示幫助畫面,給出一些簡短的命令總結說明。 
k       終止一個進程。系統將提示用戶輸入需要終止的進程PID,以及需要發送給該進程什麼樣的信號。一般的終止進程可以使用15信號;如果不能正常結束那就使用信號9強制結束該進程。默認值是信號15。在安全模式中此命令被屏蔽。 
i 忽略閒置和僵死進程。這是一個開關式命令。 
q 退出程序。 
r 重新安排一個進程的優先級別。系統提示用戶輸入需要改變的進程PID以及需要設置的進程優先級值。輸入一個正值將使優先級降低,反之則可以使該進程擁有更高的優先權。默認值是10。 
S 切換到累計模式。 
s 改變兩次刷新之間的延遲時間。系統將提示用戶輸入新的時間,單位爲s。如果有小數,就換算成m s。輸入0值則系統將不斷刷新,默認值是5 s。需要注意的是如果設置太小的時間,很可能會引起不斷刷新,從而根本來不及看清顯示的情況,而且系統負載也會大大增加。 
f或者F 從當前顯示中添加或者刪除項目。 
o或者O 改變顯示項目的順序。 
l 切換顯示平均負載和啓動時間信息。 -【就是控制最上方顯示不顯示,沒什麼用】
m 切換顯示內存信息。               -【就是控制最上方顯示不顯示,沒什麼用】
t 切換顯示進程和CPU狀態信息。      -【就是控制最上方顯示不顯示,沒什麼用】
c 切換顯示命令名稱和完整命令行。 -【有用,能看到完整的命令】

N 以 PID 的大小的順序排列表示進程列表
M 根據駐留內存大小進行排序。     -【根據內存使用情況進行排序,有用】
P 根據CPU使用百分比大小進行排序。 -【根據CPU使用情況進行排序,有用】
T 根據時間/累計時間進行排序。     -【根據進程使用的CPU時間總計排序,有用】


W 將當前設置寫入~/.toprc文件中。這是寫top配置文件的推薦方法。-【有用】

附常用操作:
top                           //每隔5秒顯式所有進程的資源佔用情況
top -d 2                  //每隔2秒顯式所有進程的資源佔用情況
top -c                     //每隔5秒顯式進程的資源佔用情況,並顯示進程的命令行參數(默認只有進程名)
top -p 12345 -p 6789//每隔5秒顯示pid是12345和pid是6789的兩個進程的資源佔用情況
top -d 2 -c -p 123456 //每隔2秒顯示pid是12345的進程的資源使用情況,並顯式該進程啓動的命令行參數



三:查看多核CPU命令

命令:mpstat -P ALL  和  sar -P ALL 

示例:
weblogic@YDCK-APP18:~/domains/mcp_domain/log/7116> mpstat -P ALL 

Linux 3.0.76-0.11-default (YDCK-APP18)     2017年06月16日     _x86_64_

09時39分36秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
09時39分36秒  all    0.43    0.00    0.07    0.01    0.00    0.02    0.00    0.00   99.46
09時39分36秒    0    2.48    0.00    0.37    0.04    0.00    0.16    0.00    0.00   96.95
09時39分36秒    1    0.57    0.00    0.16    0.03    0.00    0.00    0.00    0.00   99.24
09時39分36秒    2    0.07    0.00    0.01    0.00    0.00    0.00    0.00    0.00   99.91
09時39分36秒    3    0.06    0.00    0.01    0.00    0.00    0.00    0.00    0.00   99.92
09時39分36秒    4    0.08    0.00    0.02    0.02    0.00    0.00    0.00    0.00   99.88
09時39分36秒    5    0.07    0.00    0.01    0.01    0.00    0.00    0.00    0.00   99.91
09時39分36秒    6    0.04    0.00    0.01    0.00    0.00    0.00    0.00    0.00   99.95
09時39分36秒    7    0.05    0.00    0.01    0.00    0.00    0.00    0.00    0.00   99.94




結尾:



     感謝閱讀,祝有收穫的一天,謝謝!





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章