1.top
top -b -n 1 |grep opera|awk '{print "cpu:"$9"%","mem:"$10"%"}'
cpu:0.0% mem:26.4%
2. ps -aux
其中:
RSS-------------程序實際占用實體記憶體大小;
VSZ--------------任務虛拟位址空間的大小
3./proc/pid/status
[root@localhost ~]# cat /proc/self/status
Name: cat
State: R (running)
SleepAVG: 88%
Tgid: 5783
Pid: 5783
PPid: 5742
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6 10
VmSize: 6588 kB
VmLck: 0 kB
VmRSS: 400 kB
VmData: 144 kB
VmStk: 2040 kB
VmExe: 14 kB
VmLib: 1250 kB
StaBrk: 0804e000 kB
Brk: 088df000 kB
StaStk: bfe03270 kB
ExecLim: 0804c000
Threads: 1
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
輸出解釋
參數解釋
Name 應用程式或指令的名字
State 任務的狀态,運作/睡眠/僵死/
SleepAVG 任務的平均等待時間(以nanosecond為機關),互動式任務因為休眠次數多、時間長,它們的 sleep_avg
也會相應地更大一些,是以計算出來的優先級也會相應高一些。
Tgid 線程組号
Pid 任務ID
Ppid 父程序ID
TracerPid 接收跟蹤該程序資訊的程序的ID号
Uid Uid euid suid fsuid
Gid Gid egid sgid fsgid
FDSize 檔案描述符的最大個數,file->fds
Groups
VmSize(KB) 任務虛拟位址空間的大小
(total_vm-reserved_vm),其中total_vm為程序的位址空間的大小,reserved_vm:程序在預留或特殊的記憶體間的實體頁
VmLck(KB) 任務已經鎖住的實體記憶體的大小。鎖住的實體記憶體不能交換到硬碟 (locked_vm)
VmRSS(KB) 應用程式正在使用的實體記憶體的大小,就是用ps指令的參數rss的值 (rss)
VmData(KB) 程式資料段的大小(所占虛拟記憶體的大小),存放初始化了的資料;
(total_vm-shared_vm-stack_vm)
VmStk(KB) 任務在使用者态的棧的大小 (stack_vm)
VmExe(KB) 程式所擁有的可執行虛拟記憶體的大小,代碼段,不包括任務使用的庫 (end_code-start_code)
VmLib(KB) 被映像到任務的虛拟記憶體空間的庫的大小 (exec_lib)
VmPTE 該程序的所有頁表的大小,機關:kb
Threads 共享使用該信号描述符的任務的個數,在POSIX多線程式應用程式中,線程組中的所有線程使用同一個信号描述符。
SigQ 待處理信号的個數
SigPnd 屏蔽位,存儲了該線程的待處理信号
ShdPnd 屏蔽位,存儲了該線程組的待處理信号
SigBlk 存放被阻塞的信号
SigIgn 存放被忽略的信号
SigCgt 存放被俘獲到的信号
CapInh Inheritable,能被目前程序執行的程式的繼承的能力
CapPrm
Permitted,程序能夠使用的能力,可以包含CapEff中沒有的能力,這些能力是被程序自己臨時放棄的,CapEff是CapPrm的一個子集,程序放棄沒有必要的能力有利于提高安全性
CapEff Effective,程序的有效能力
範例 1
可以看出該應用程式的正文段(1KB)很小,說明代碼很少,是依靠庫(1251KB)來執行。棧(138KB)适中,說明沒有太多許多嵌套函數或特别多的臨時變量。VmLck為0說明程序沒有鎖住任何頁。VmRSS表示目前程序使用的實體記憶體為2956KB。當程序開始使用已經申請的但還沒有用的記憶體時,VmRSS的值開始增大,但是VmSize保持不變。
[root@localhost 1]# cat /proc/4668/status
Name: gam_server
State: S (sleeping)
Tgid: 31999
Pid: 31999
PPid: 1
VmSize: 2136 kB
VmRSS: 920 kB
VmData: 148 kB
VmStk: 88 kB
VmExe: 44 kB
VmLib: 1820 kB
VmPTE: 20 kB
SigQ: 1/2047
SigIgn: 0000000000001006
SigCgt: 0000000210000800
[root@localhost 31999]#4 /proc//statm
包含了所有CPU活躍的資訊,該檔案中的所有值都是從系統啟動開始累計到目前時刻。
[root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
以下是我自己的了解:
從上面可以看出VmRSS才是我們最關心的記憶體大小,即
正在使用的實體記憶體的大小;
而VmSize是程序所擁有的虛拟空間的大小;
“當程序開始使用已經申請的但還沒有用的記憶體時,
VmRSS的值開始增大,但是VmSize保持不變。”
我們之是以看到許多記憶體的值的大小超過了記憶體的總的大小
是因為這裡顯示的都是虛拟記憶體的大小,而不是實際的占用的大小;
這是其它的地方的解釋
From cat /proc/4743/statm
6114501850018831805934310
1. size :- total program size (611450 X 4096/1024 = 2445800kB = 2388M)
2. resident :- resident set size (185001 X 4096/1024 = 740004kB = 722M)
3. share :- shared pages (883 X 4096 = 3532)
4. trs :- text (code) (18 X 4096/1024 = 72kB = VmExe )
5. drs :- data/stack
6. lrs :- library (593431 X 4096/1024 = 2373724kB = VmData +VmStk)
7. dt :- dirty pages
從這裡可以看出第一項是程序的可執行的大小,X4就等于VmSize
而第二項的值X4就等于VmRSS
1、top
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauUjMxQTM4ADNx8CX2AzMxAjMvwFduVWboNWY0RXYvwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.jpg)
top指令是Linux下常用的性能分析工具,能夠實時顯示系統中各個程序的資源占用狀況,類似于Windows的任務管理器
内容解釋:
PID:程序的ID
USER:程序所有者
PR:程序的優先級别,越小越優先被執行
NInice:值
VIRT:程序占用的虛拟記憶體
RES:程序占用的實體記憶體
SHR:程序使用的共享記憶體
S:程序的狀态。S表示休眠,R表示正在運作,Z表示僵死狀态,N表示該程序優先值為負數
%CPU:程序占用CPU的使用率
%MEM:程序使用的實體記憶體和總記憶體的百分比
TIME+:該程序啟動後占用的總的CPU時間,即占用CPU使用時間的累加值。
COMMAND:程序啟動指令名稱
常用的指令:
P:按%CPU使用率排行
T:按MITE+排行
M:按%MEM排行
2、/proc/pid
測量一個程序占用了多少記憶體,linux為我們提供了一個很友善的方法,/proc目錄為我們提供了所有的資訊
說明:
/proc/N pid為N的程序資訊
/proc/N/cmdline 程序啟動指令
/proc/N/cwd 連結到程序目前工作目錄
/proc/N/environ 程序環境變量清單
/proc/N/exe 連結到程序的執行指令檔案
/proc/N/fd 包含程序相關的所有的檔案描述符
/proc/N/maps 與程序相關的記憶體映射資訊
/proc/N/mem 指代程序持有的記憶體,不可讀
/proc/N/root 連結到程序的根目錄
/proc/N/stat 程序的狀态
/proc/N/statm 程序使用的記憶體的狀态
/proc/N/status 程序狀态資訊,比stat/statm更具可讀性
/proc/self 連結到目前正在運作的程序
3、pmap