1、系統性能分析(top命令)node
top 命令是 Linux 下經常使用的性能分析工具,可以實時顯示系統中各個進程的資源佔用情況,默認5秒刷新一下進程列表,因此相似於 Windows 的任務管理器。
緩存
top命令顯示的前五行是系統總體的統計信息。ide
第一行是任務隊列信息,同uptime命令的執行結果。eg.函數
top - 15:09:51 up 17 days , 3:38 , 4 users , load average : 1.09 , 3.39 , 4.76工具
15:09:51 當前時間
up 17 days , 3:38 系統運行時間,格式爲時:分
4 users 當前登陸用戶數
load average : 1.09 , 3.39 , 4.76 系統負載,即任務隊列的平均長度。
三個數值分別爲1分鐘、5分鐘、15分鐘前到如今的平均值。性能
第2、三行爲進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。eg.spa
Tasks : 115 total , 1 running , 114 sleeping , 0stopped , 0zombie
Cpu(s) : 16.1% us , 2.0% sy , 0.0% ni , 79.5% id , 1.4% wa , 0.0% hi , 1.0% si操作系統
Tasks : 115 total 進程總數
1 running 正在運行進程數
114 sleeping 睡眠進程數
0 stopped 中止進程數
0 zombie 殭屍進程數
Cpu(s) : 16.1% us 用戶空間佔用CPU百分比
2.0% sy 內核空間佔用CPU百分比
0.0% ni 用戶進程空間內改變過優先級的進程佔用CPU百分比
79.5% id 空閒CPU百分比
1.4% wa 等待輸入輸出的CPU時間百分比
0.0% hi
0.0% si命令行
最後兩行爲內存信息。eg.orm
Mem : 8169876 k total , 7686472 k used , 483404 k free , 35272 k buffers
Swap : 4096532 k total , 160 k used , 4096372 k free , 2477532 k cached
Mem : 8169876 ktotal 物理內存總量
7686472 k used 使用的物理內存總量
483404 k free 空閒內存總量
35272 k buffers 用做內核緩存的內存量
Swap : 4096532 k total 交換分區總量
160 k used 使用的交換區總量
4096372 k free 空閒交換區總量
2477532 k cached 緩衝的交換區總量。
內存中的內容被換出到交換區,然後又被換入到內存,但使用過的交換區還沒有被覆蓋,該數值即爲這些內容已存在於內存中的交換區的大小。相應的內存再次被換出時可沒必要再對交換區寫入。
統計信息區域的下方顯示了各個進程的詳細信息。首先來認識一下各列的含義。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
序號列名含義
PID 進程id
PPID 父進程id
RUSER Realusername
UID 進程全部者的用戶id
USER 進程全部者的用戶名
GROUP 進程全部者的組名
TTY 啓動進程的終端名。不是從終端啓動的進程則顯示爲?
PR 優先級
NInice 值。負值表示高優先級,正值表示低優先級
P 最後使用的CPU,僅在多CPU環境下有意義
%CPU 上次更新到如今的CPU時間佔用百分比
TIME 進程使用的CPU時間總計,單位秒
TIME+ 進程使用的CPU時間總計,單位1/100秒
%MEM 進程使用的物理內存百分比
VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
SWAP 進程使用的虛擬內存中,被換出的大小,單位kb。
RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
CODE 可執行代碼佔用的物理內存大小,單位kb
DATA 可執行代碼之外的部分(數據段+棧)佔用的物理內存大小,單位kb
SHR 共享內存大小,單位kb
nFLT 頁面錯誤次數
nDRT 最後一次寫入到如今,被修改過的頁面數。
S 進程狀態。
D= 不可中斷的睡眠狀態
R= 運行
S= 睡眠
T= 跟蹤/中止
Z= 殭屍進程
COMMAND 命令名/命令行
WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名
Flags 任務標誌,參考sched.h
top裏能夠設置按照某一項來排序,默認的狀況下,是按照CPU的使用狀況來排序,
M,(注意大寫),按內存使用狀況排序
P , 根據CPU使用百分比大小進行排序
T, 根據時間/累計時間進行排序。
輸入字母k(小寫),而後再輸入想要kill的PID
固然你也可直接運行命令,kill PID
top的其餘用法,能夠在top界面中,輸"h",就能夠進入到top命令幫助界面
2、更準確解讀內存的佔用率(free命令)
Linux下如何查內存信息,如內存總量、已使用量、可以使用量。
常用Windows操做系統的朋友,已經習慣了若是空閒的內存較多,內心比較踏實。
當使用Linux時,可能覺的Linux物理內存很快被用光(如頻繁存取文件後),當程序結束後內存沒有被釋放。空閒內存少的可憐,內心總不踏實。
Linux操做系統的內存管理方式與Windows不一樣,Linxu會盡可能多的利用內存,讓儘量多的內存參與工做(作cache)以提升性能。
因此你看到的空閒內存老是很小,當你的程序須要更多內存時,Linxu系統會把作cache的內存還給你,讓你來運行你的程序。
圖1
free -m :查看內存狀況,( -m )表示單位爲MB。
total 內存總數
used 已經使用的內存數(個人程序使用內存數量+系統緩存使用的內數量)
free 空閒的物理內存數(是真正的空閒,未被任何程序佔用)
shared 多個進程共享的內存總額
buffers 磁盤緩存(Buffer Cache)的大小(可提升系統I/O調用的性能)
cached 磁盤緩存(Page Cache)的大小(可提升系統I/O調用的性能)
-buffers/cache 表示已被咱們的程序使用的內存數,計算方法:used - buffers - cached
+buffers/cache 表示還可已被我使用的內存數,計算方法:free + buffers + cached
操做系統目前可用內存總量=free + buffers + cached,上圖是1155M
buffers是用來給塊設備作的緩衝大小、buffers是用來存儲目錄裏面有什麼內容,權限等等
cached用來給文件作緩衝,用來記憶咱們打開的文件.
即便你的程序運行結束後,Cache Memory也不會自動釋放。
這就會致使你在Linux系統中程序頻繁讀寫文件後,你會發現可用物理內存(free)會不多。
其實這緩存內存(Cache Memory)在你須要使用內存的時候會自動釋放,因此你沒必要擔憂沒有內存可用。
若是你但願手動去釋放Cache Memory也是有辦法的。
手動釋放緩存---------------------------------------/proc是一個虛擬文件系統,咱們能夠經過對它的讀寫操做作爲與kernel實體間進行通訊的一種手段。也就是說能夠經過修改/proc中的文件,來對當前kernel的行爲作出調整。那麼咱們能夠經過調整/proc/sys/vm/drop_caches來釋放內存。操做以下:cat /proc/sys/vm/drop_caches 查看默認值先手動執行sync命令,sync 命令將全部未寫的系統緩衝區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。# echo 3 > /proc/sys/vm/drop_caches# cat /proc/sys/vm/drop_caches3將/proc/sys/vm/drop_caches值設爲3再來運行free命令。能夠看出來有效的釋放了buffer和cache。