歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

linux 查看進程占用內存

1.top

top -b -n 1 |awk '{print "cpu:"$9"%","mem:"$10"%"}'

cpu:average:% mem:0.06,%

cpu:stopped,% mem:0%

cpu:id,% mem:5.1%

cpu:38984% mem:buffers%

cpu:592484% mem:cached%

cpu:% mem:%

cpu:%CPU% mem:%MEM%

cpu:6.5% mem:1.2%

cpu:0.0% mem:0.1%

cpu:0.0% mem:0.0%

...

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)

SleepAVG: 88%

Tgid: 31999

Pid: 31999

PPid: 1

TracerPid: 0

Uid: 0 0 0 0

Gid: 0 0 0 0

FDSize: 256

Groups: 0 1 2 3 4 6 10

VmSize: 2136 kB

VmLck: 0 kB

VmRSS: 920 kB

VmData: 148 kB

VmStk: 88 kB

VmExe: 44 kB

VmLib: 1820 kB

VmPTE: 20 kB

Threads: 1

SigQ: 1/2047

SigPnd: 0000000000000000

ShdPnd: 0000000000000000

SigBlk: 0000000000000000

SigIgn: 0000000000001006

SigCgt: 0000000210000800

CapInh: 0000000000000000

CapPrm: 00000000fffffeff

CapEff: 00000000fffffeff

[root@localhost 31999]#4 /proc//statm

包含了所有CPU活躍的信息,該文件中的所有值都是從系統啟動開始累計到當前時刻。

[root@localhost ~]# cat /proc/self/statm

654 57 44 0 0 334 0

以下是我自己的理解:

從上面可以看出VmRSS才是我們最關心的內存大小,即正在使用的物理內存的大小;

而VmSize是進程所擁有的虛擬空間的大小;“當進程開始使用 已經申請的但還沒有用的內存時,

VmRSS的值開始增大,但是VmSize保持不變。”我們之所以看到許多內存的值的大小超過了內存的總的大小

是因為這裡顯示的都是虛擬內存的大小,而不是實際的占用的大小;

Copyright © Linux教程網 All Rights Reserved