linux下定位内存泄漏 /proc/pid/status 解释

内存泄漏一直是程序定位的盲点,很多时候感觉用着用着内存会越来越少,导致程序崩溃,而一般top等linux命令又不够详细,通过cat /proc/pid/status 命令,可详细查看进程的内存占用情况,其中pid是进程id.

进程号去查状态 cat /proc/(PID)/status

Name: mysqld --进程名字
State: S (sleeping) --进程状态
Tgid: 23778 --进程组号
Pid: 23778 --进程号
PPid: 21783 --父进程号
TracerPid: 0 --跟踪进程号,0表示没有跟踪
Uid: 803 803 803 803 --用户id
Gid: 803 803 803 803 --组id
Utrace: 0
FDSize: 8192 --使用文件描述符的上限
Groups: 803
VmPeak: 11775740 kB --内存峰值
VmSize: 11775740 kB --内存使用
VmLck: 0 kB --锁住的内存
VmHWM: 1522852 kB --物理内存峰值
VmRSS: 1522852 kB --物理内存实际使用
VmData: 11722700 kB --数据段大小
VmStk: 92 kB --堆栈段大小
VmExe: 23168 kB --代码段大小
VmLib: 3528 kB --lib库大小
VmPTE: 3492 kB --使用页表的大小
VmSwap: 0 kB --使用swap的大小
Threads: 43 --线程的数量
SigQ: 542/2067000
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000084007
SigIgn: 0000000000003006
SigCgt: 00000001800006e8
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed: ffff,ffffffff --cpu使用掩码
Cpus_allowed_list: 0-47 --cpu列表
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000003
Mems_allowed_list: 0-1 --内存列表
voluntary_ctxt_switches: 1314 --主动切换的次数
nonvoluntary_ctxt_switches: 109 --被动切换的次数

其中可重点关注以下参数
FDSize: --使用文件描述符的上限
VmPeak: 表示进程所占用最大虚拟内存大小
VmSize: 表示进程当前虚拟内存大小
VmLck: 表示被锁定的内存大小
VmHWM: 表示进程所占用物理内存的峰值
VmRSS: 表示进程当前占用物理内存的大小(与procrank中的RSS)
VmData: 表示进程数据段的大小
VmStk: 表示进程堆栈段的大小
VmExe: 表示进程代码的大小
VmLib: 表示进程所使用共享库的大小

你可能感兴趣的:(调试技巧,linux,内存,/proc/status)