内存查看与内存泄露检测方法

内存查看的几个方法

cat /proc/{pid}/status

cat /proc/{pid}/maps

cat /proc/meminfo

top

 

Top命令介绍:

 PID    :     进程ID
 PPID  :  父进程ID,1表示init进程,
 USER  : 当前用户  
 STAT   :    进程当前运行状态
 VSZ     :此进程一共占用了多大物理内存。
 %MEM :  此进程占总内存消耗的百分比
 %CPU  :   此进程占总CPU消耗的百分比
 COMMAND : 进程启动时的命令行格式

 

/proc/meminfo介绍

$cat /proc/meminfo MemTotal:   2052440 kB //总内存

MemFree:    50004 kB //空闲内存

Buffers:         19976 kB //给文件的缓冲大小

Cached:      436412 kB //高速缓冲存储器使用的大小

SwapCached:19864 kB //被高速缓冲存储用的交换空间大小

Active: 1144512 kB //活跃使用中的高速缓冲存储器页面文件大小

Inactive:         732788 kB //不经常使用的高速缓冲存储器页面文件大小

可用的物理内存=memfree+buffers+cached,
当memfree不够时,内核会通过回写机制(pdflush线程)把cached和buffered内存回写到后备存储器,从而释放相关内存供进程使用,或者通过手动方式显式释放cache内存

 

/proc/{pid}/maps介绍

# cat maps

(1)                         (2)(3)         (4)(5)       (6)        
00400000-00414000 r-xp 00000000 1f:05 193        /bin/wanManager             代码段
00453000-00454000 rw-p 00013000 1f:05 193        /bin/wanManager            数据段
00454000-0045d000 rwxp 00454000 00:00 0          [heap]                                 堆
2aaa8000-2aaae000 r-xp 00000000 1f:05 366        /lib/ld-uClibc-0.9.28.so   程序连接的共享库的内存地址
2aaae000-2aaaf000 rw-p 2aaae000 00:00 0
2aaed000-2aaee000 r--p 00005000 1f:05 366        /lib/ld-uClibc-0.9.28.so
2aaee000-2aaef000 rw-p 00006000 1f:05 366        /lib/ld-uClibc-0.9.28.so
2aaef000-2ab4d000 r-xp 00000000 1f:05 319        /lib/libuClibc-0.9.28.so
2ab4d000-2ab8c000 ---p 2ab4d000 00:00 0
2ab8c000-2ab8d000 r--p 0005d000 1f:05 319        /lib/libuClibc-0.9.28.so
2ab8d000-2ab8e000 rw-p 0005e000 1f:05 319        /lib/libuClibc-0.9.28.so
2ab8e000-2ab93000 rw-p 2ab8e000 00:00 0
2ab93000-2ab96000 r-xp 00000000 1f:05 313        /lib/libnvram-0.9.28.so
2ab96000-2abd6000 ---p 2ab96000 00:00 0
2abd6000-2abe4000 rw-p 00003000 1f:05 313        /lib/libnvram-0.9.28.so
2abe4000-2abe8000 r-xp 00000000 1f:05 365        /lib/libcfg.so
2abe8000-2ac28000 ---p 2abe8000 00:00 0
2ac28000-2ac29000 rw-p 00004000 1f:05 365        /lib/libcfg.so
2ac29000-2ac38000 r-xp 00000000 1f:05 310        /lib/libpthread-0.9.28.so
2ac38000-2ac77000 ---p 2ac38000 00:00 0
2ac77000-2ac7c000 rw-p 0000e000 1f:05 310        /lib/libpthread-0.9.28.so
2ac7c000-2ac7e000 rw-p 2ac7c000 00:00 0                                                      线程栈
7ff41000-7ff56000 rwxp 7ff41000 00:00 0          [stack]          

(1)内存段的虚拟地址
(2)可执行权限 r w x  p_私有 s_公有

(3)在进程地址的偏移量

(4)映像文件主次设备号

(5)映像文件的节点号inode

(6)映像文件的路径

 

 

/proc/{pid}/status介绍

 

VmSize:整个进程使用虚拟内存大小,是VmLib, VmExe, VmData, 和VmStk的总和。
 
VmLck: 虚拟内存锁。进程当前使用的并且加锁的虚拟内存总数
VmHWM: 表示进程所占用物理内存的峰值
VmRSS: 虚拟内存驻留集合大小。这是驻留在物理内存的一部分。它没有交换到硬盘。它包括代码,数据和栈。
 
VmData: 虚拟内存数据。堆使用的虚拟内存。

VmStk: 虚拟内存栈  栈使用的虚拟内存
 
VmExe: 可执行的虚拟内存, 可执行的和静态链接库所使用的虚拟内存
VmLib: 虚拟内存库动态链接库所使用的虚拟内存

posted on 2014-04-04 15:40  __zc__Linux__  阅读(2228)  评论(0编辑  收藏  举报