proc-pid-mem

来源:互联网 发布:cpu卡发卡软件 编辑:程序博客网 时间:2024/06/08 13:11

linxu下proc是个很重要的文件系统,很多和内核相关的信息都存在这里.

 伦理片 http://www.dotdy.com/

maps

Txt代码  
  1. 40000000-40009000 r-xp 00000000 ca:01 12550177                 /opt/java/jdk-1.6.0_32/bin/java  
  2. 40108000-4010a000 rwxp 00008000 ca:01 12550177                 /opt/java/jdk-1.6.0_32/bin/java  
  3. // 以上是进程的启动命令  
  4. ...  
  5.   
  6. // 这里开始是分配给这个线程堆区的物理地址开始位置,包含了每个加载的文件的起始地址  
  7. 40bbf000-40c24000 rwxp 00000000 00:00 0                        [heap]  
  8. 40c24000-40c27000 ---p 00000000 00:00 0  
  9. ...  
  10. d0000000-100000000 rwxp 00000000 00:00 0  
  11. 3671800000-367181c000 r-xp 00000000 ca:01 2261321              /lib64/ld-2.5.so  
  12. 3671a1c000-3671a1d000 r-xp 0001c000 ca:01 2261321              /lib64/ld-2.5.so  
  13. 3671a1d000-3671a1e000 rwxp 0001d000 ca:01 2261321              /lib64/ld-2.5.so  
  14. 7f07c04ec000-7f07c1bb7000 rwxp 00000000 00:00 0  
  15. 7f07c1bb7000-7f07c1bbc000 r-xp 00000000 ca:01 12551958         /opt/java/jdk-1.6.0_32/jre/lib/amd64/headless/libmawt.so  
  16. 7f07c1bbc000-7f07c1cbb000 ---p 00005000 ca:01 12551958         /opt/java/jdk-1.6.0_32/jre/lib/amd64/headless/libmawt.so  
  17. 7f07c1cbb000-7f07c1cbd000 rwxp 00004000 ca:01 12551958         /opt/java/jdk-1.6.0_32/jre/lib/amd64/headless/libmawt.so  
  18. 7f07c1cbd000-7f07c1d4f000 r-xp 00000000 ca:01 12551964         /opt/java/jdk-1.6.0_32/jre/lib/amd64/libawt.so  
  19. 7f07c1d4f000-7f07c1e4e000 ---p 00092000 ca:01 12551964         /opt/java/jdk-1.6.0_32/jre/lib/amd64/libawt.so  
  20. 7f07c1e4e000-7f07c1e68000 rwxp 00091000 ca:01 12551964         /opt/java/jdk-1.6.0_32/jre/lib/amd64/libawt.so  
  21. ...  
  22. 7f07e0bb4000-7f07e0bbc000 rwxs 00000000 ca:01 16678915         /tmp/hsperfdata_admin/22892  
  23. 7f07e0bbc000-7f07e0bc3000 r-xs 00000000 ca:01 4981946          /usr/lib64/gconv/gconv-modules.cache  
  24. 7f07e0bc3000-7f07e0bc4000 rwxp 00000000 00:00 0  
  25. 7f07e0bc4000-7f07e0bc5000 r-xp 00000000 00:00 0  
  26. 7f07e0bc5000-7f07e0bc6000 r-xp 00000000 ca:01 5996807          /usr/local/snoopy/lib/snoopy.so  
  27. 7f07e0bc6000-7f07e0dc6000 ---p 00001000 ca:01 5996807          /usr/local/snoopy/lib/snoopy.so  
  28. 7f07e0dc6000-7f07e0dc7000 rwxp 00001000 ca:01 5996807          /usr/local/snoopy/lib/snoopy.so  
  29. 7f07e0dc7000-7f07e0dca000 rwxp 00000000 00:00 0  
  30. 7fff73ffc000-7fff74016000 rwxp 00000000 00:00 0                [stack]  // 用户态栈区  
  31. 7fff74098000-7fff74099000 r-xp 00000000 00:00 0                [vdso]  // Virtual Dynamically-linked Shared Object  
  32. ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0        [vsyscall]  // 内核区  

 

 

     maps记录的是进程的简单信息,可以看堆区是不是在一直增长来判断是不是内存溢出。jvm的内存是虚拟内存,直接映射到os的物理内存中。有时候jvm中的虚拟内存是没什么问题,但是堆外内存一直在增长,这里是可以看出来的。详细内容见smaps

 

 smaps

Txt代码  
  1. 40bbf000-40c24000 rwxp 00000000 00:00 0                [heap]  
  2. Size:                404 kB    // 虚拟内存大小  
  3. Rss:                 324 kB    // 实际使用物理内存大小  
  4. Pss:                 324 kB  
  5. Shared_Clean:          0 kB    // 页面被改,则是dirty,否则是clean,页面引用计数>1,是shared,否则是private  
  6. Shared_Dirty:          0 kB  
  7. Private_Clean:         0 kB  
  8. Private_Dirty:       324 kB  
  9. Referenced:          324 kB  
  10. Anonymous:           324 kB  
  11. AnonHugePages:         0 kB  
  12. Swap:                  0 kB    // 处于交换区的页面大小  
  13. KernelPageSize:        4 kB    // 操作系统一个页面大小  
  14. MMUPageSize:           4 kB    // 体系结构MMU一个页面大小   

 

 status

Txt代码  
  1. Name:   java          // 启动命令  
  2. State:  S (sleeping)  // 任务状态,运行/睡眠/僵死  
  3. Tgid:   22892         // 线程组号  
  4. Pid:    22892         // 进程id  
  5. PPid:   22881         // 父进程id  
  6. TracerPid:      0  
  7. Uid:    505     505     505     505  
  8. Gid:    505     505     505     505  
  9. Utrace: 0  
  10. FDSize: 1024  
  11. Groups: 505  
  12. VmPeak:  1757412 kB   // 内存使用峰值  
  13. VmSize:  1756360 kB   // 进程虚拟地址空间大小  
  14. VmLck:         0 kB   // 进程锁住的物理内存大小,锁住的物理内存无法交换到硬盘  
  15. VmHWM:    817696 kB     
  16. VmRSS:    817688 kB   // 进程正在使用的物理内存大小  
  17. VmData:  1578852 kB   // 进程数据段大小  
  18. VmStk:       108 kB   // 进程用户态栈大小  
  19. VmExe:        36 kB   // 进程代码段大小  
  20. VmLib:    100032 kB   // 进程使用的库映射到虚拟内存空间的大小  
  21. VmPTE:      2176 kB   // 进程页表大小  
  22. VmSwap:        0 kB   // 交换区  
  23. Threads:        162  
  24. SigQ:   0/31611  
  25. SigPnd: 0000000000000000  
  26. ShdPnd: 0000000000000000  
  27. SigBlk: 0000000000000000  
  28. SigIgn: 0000000000002223  
  29. SigCgt: 1000000181005ccc  
  30. CapInh: 0000000000000000  
  31. CapPrm: 0000000000000000  
  32. CapEff: 0000000000000000  
  33. CapBnd: ffffffffffffffff  
  34. Cpus_allowed:   7fff  
  35. Cpus_allowed_list:      0-14  
  36. Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001  
  37. Mems_allowed_list:      0  
  38. voluntary_ctxt_switches:        1  
  39. nonvoluntary_ctxt_switches:     6  

 

     linux下内存占用是一个比较复杂的概念,不能简单通过一个单一指标就判断某个程序“内存消耗”大小:

  • 进程所申请的内存不一定真正会被用到(malloc或mmap的实现)
  • 真正用到了的内存也不一定是只有该进程自己在用 (比如动态共享库)

 


0 0