`
wupuyuan
  • 浏览: 77473 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

proc-pid-maps&smaps

阅读更多

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

 

maps

40000000-40009000 r-xp 00000000 ca:01 12550177                 /opt/java/jdk-1.6.0_32/bin/java
40108000-4010a000 rwxp 00008000 ca:01 12550177                 /opt/java/jdk-1.6.0_32/bin/java
// 以上是进程的启动命令
...

// 这里开始是分配给这个线程堆区的物理地址开始位置,包含了每个加载的文件的起始地址
40bbf000-40c24000 rwxp 00000000 00:00 0                        [heap]
40c24000-40c27000 ---p 00000000 00:00 0
...
d0000000-100000000 rwxp 00000000 00:00 0
3671800000-367181c000 r-xp 00000000 ca:01 2261321              /lib64/ld-2.5.so
3671a1c000-3671a1d000 r-xp 0001c000 ca:01 2261321              /lib64/ld-2.5.so
3671a1d000-3671a1e000 rwxp 0001d000 ca:01 2261321              /lib64/ld-2.5.so
7f07c04ec000-7f07c1bb7000 rwxp 00000000 00:00 0
7f07c1bb7000-7f07c1bbc000 r-xp 00000000 ca:01 12551958         /opt/java/jdk-1.6.0_32/jre/lib/amd64/headless/libmawt.so
7f07c1bbc000-7f07c1cbb000 ---p 00005000 ca:01 12551958         /opt/java/jdk-1.6.0_32/jre/lib/amd64/headless/libmawt.so
7f07c1cbb000-7f07c1cbd000 rwxp 00004000 ca:01 12551958         /opt/java/jdk-1.6.0_32/jre/lib/amd64/headless/libmawt.so
7f07c1cbd000-7f07c1d4f000 r-xp 00000000 ca:01 12551964         /opt/java/jdk-1.6.0_32/jre/lib/amd64/libawt.so
7f07c1d4f000-7f07c1e4e000 ---p 00092000 ca:01 12551964         /opt/java/jdk-1.6.0_32/jre/lib/amd64/libawt.so
7f07c1e4e000-7f07c1e68000 rwxp 00091000 ca:01 12551964         /opt/java/jdk-1.6.0_32/jre/lib/amd64/libawt.so
...
7f07e0bb4000-7f07e0bbc000 rwxs 00000000 ca:01 16678915         /tmp/hsperfdata_admin/22892
7f07e0bbc000-7f07e0bc3000 r-xs 00000000 ca:01 4981946          /usr/lib64/gconv/gconv-modules.cache
7f07e0bc3000-7f07e0bc4000 rwxp 00000000 00:00 0
7f07e0bc4000-7f07e0bc5000 r-xp 00000000 00:00 0
7f07e0bc5000-7f07e0bc6000 r-xp 00000000 ca:01 5996807          /usr/local/snoopy/lib/snoopy.so
7f07e0bc6000-7f07e0dc6000 ---p 00001000 ca:01 5996807          /usr/local/snoopy/lib/snoopy.so
7f07e0dc6000-7f07e0dc7000 rwxp 00001000 ca:01 5996807          /usr/local/snoopy/lib/snoopy.so
7f07e0dc7000-7f07e0dca000 rwxp 00000000 00:00 0
7fff73ffc000-7fff74016000 rwxp 00000000 00:00 0                [stack]  // 用户态栈区
7fff74098000-7fff74099000 r-xp 00000000 00:00 0                [vdso]  // Virtual Dynamically-linked Shared Object
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0        [vsyscall]  // 内核区

 

     第一列: 虚拟内存区域的起始和终止地址

     第二列: 虚拟内存的读写权限:r=read, w=write, x=execute, s=shared, p=private(copy on write)

     第三列: 文件在虚拟内存区域的偏移量

     第四列: 文件的主设备号和次设备号

     第五列: 设备的节点号,0表示没有节点与内存相对应

     第六列: /lib/ld-2.3.4.so 被映射文件的文件名,可以为空

 

 

             执行命令:ldd /opt/taobao/install/jdk-1.6.0_32/bin/java

linux-vdso.so.1 =>  (0x00007fffef7ff000)
/usr/local/snoopy/lib/snoopy.so (0x00007f3d00308000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3d000da000)
libjli.so => /opt/taobao/install/jdk-1.6.0_32/bin/../jre/lib/amd64/jli/libjli.so (0x00007f3cfffd0000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f3cffdcc000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3cffa73000)
/lib64/ld-linux-x86-64.so.2 (0x0000003671800000)

     可以看到,为了运行这个命令,内核已经加载了哪些文件,这些文件就是内核映射的代码入口(系统本身并不存在这样的链接库文件,ldd命令展示用的)。

     

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

 

 smaps

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

 

 status

Name:   java          // 启动命令
State:  S (sleeping)  // 任务状态,运行/睡眠/僵死
Tgid:   22892         // 线程组号
Pid:    22892         // 进程id
PPid:   22881         // 父进程id
TracerPid:      0
Uid:    505     505     505     505
Gid:    505     505     505     505
Utrace: 0
FDSize: 1024
Groups: 505
VmPeak:  1757412 kB   // 内存使用峰值
VmSize:  1756360 kB   // 进程虚拟地址空间大小
VmLck:         0 kB   // 进程锁住的物理内存大小,锁住的物理内存无法交换到硬盘
VmHWM:    817696 kB   
VmRSS:    817688 kB   // 进程正在使用的物理内存大小
VmData:  1578852 kB   // 进程数据段大小
VmStk:       108 kB   // 进程用户态栈大小
VmExe:        36 kB   // 进程代码段大小
VmLib:    100032 kB   // 进程使用的库映射到虚拟内存空间的大小
VmPTE:      2176 kB   // 进程页表大小
VmSwap:        0 kB   // 交换区
Threads:        162
SigQ:   0/31611
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000002223
SigCgt: 1000000181005ccc
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed:   7fff
Cpus_allowed_list:      0-14
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        1
nonvoluntary_ctxt_switches:     6

 

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

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

 

分享到:
评论

相关推荐

    前端开源库-proc-stats

    **前端开源库-proc-stats** `proc-stats` 是一个专为前端开发设计的开源库,其主要功能是提供对进程状态的实时监控和统计。在Web应用开发中,尤其是在进行性能优化或者调试时,了解应用的运行状态和资源消耗是非常...

    前端开源库-swint-proc-ops

    **Swint-Proc-Ops:前端开发中的过程运算符库** Swint-Proc-Ops 是一个专门为前端开发者设计的开源库,它专注于处理和操作进程,尤其在进行复杂任务管理和控制流程时提供便利。这个库是Swint框架的一个扩展,为前端...

    前端开源库-gobem-proc-uglify

    本文将深入探讨一个名为"前端开源库-gobem-proc-uglify"的工具,该库专注于JavaScript文件的压缩优化,帮助开发者们在生产环境中提升网页加载速度。 `gobem-proc-uglify`是一个基于`gobem`构建工具的处理器,其主要...

    ProC-C++编程指南目录

    根据给定的“ProC-C++编程指南目录”,我们可以详细解析出以下IT知识知识点: ### 一、Pro*C/C++概述 #### 1.1 Oracle应用 - Oracle数据库系统是Pro*C/C++的重要应用场景,本章节将介绍如何在Oracle环境下进行开发...

    ITCMMI-PROC-PM-002行软件开发管理办法.pdf

    为响应这一挑战,IT部门出台了一套《ITCMMI-PROC-PM-002行软件开发管理办法》,旨在通过严格规范软件开发的每一个环节,确保银行内部软件产品的研发质量,同时提高开发过程的效率和合规性。 该办法适用范围广泛,...

    sati-algo-neo-proc-5.0-SNAPSHOT.jar

    用于neo4j数据库中的算法插件包,下载后需要放入plugin文件夹下,并修改neo4j的config文件,最后重启服务可以使用

    perl-Proc-Daemon-0.14-8.3.noarch

    perl-Proc-Daemon-0.14-8.3.noarch。

    亲爱的:Rust proc-macro属性解析器

    在Rust编程语言中,`proc-macro`是一种特性,允许开发者自定义语法扩展,它在编译时执行,能够生成源代码。`proc-macro`通常用于创建元编程库,比如实现数据结构的序列化、注解处理或构建DSL(领域特定语言)。在这...

    ProC-Sample.rar_oracle_oracle proc sample_proc

    标题中的"ProC-Sample.rar_oracle_oracle proc sample_proc"揭示了这是一个关于Oracle数据库的ProC编程示例。ProC是Oracle提供的一种预编译器,它允许开发者在PL/SQL中嵌入C代码,以提高性能和处理复杂计算。这个...

    rust-proc-macro2:https

    proc-macro2 编译器proc_macro板条箱的程序宏API的包装器。 该库有两个目的: 将类似于proc-macro的功能带到诸如build.rs和main.rs之类的其他上下文中。 proc_macro中的类型完全特定于过程宏,并且永远不会存在于...

    Python库 | k3proc-0.2.9-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:k3proc-0.2.9-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    PyPI 官网下载 | proc-0.2.2.tar.gz

    标题中的"PyPI 官网下载 | proc-0.2.2.tar.gz"指的是Python Package Index(PyPI)上发布的proc库的0.2.2版本的源代码压缩包。PyPI是Python开发者发布和分享自己编写的软件包的官方平台,方便其他用户通过pip安装和...

    QM-PROC-QMP-11-软件系统设计模板(软件系统设计说明书模板)-V4.0.pdf

    这份名为"QM-PROC-QMP-11-软件系统设计模板(软件系统设计说明书模板)-V4.0.pdf"的文档,提供了一个标准化的系统设计模板,旨在帮助开发者规范地进行软件设计工作,确保设计的完整性和一致性。 首先,文档的状态标记...

    通过Linux系统的内核观察/proc/pid/statm

    通过 Linux 系统的内核观察 /proc/pid/statm 通过 Linux 系统的内核观察 /proc/pid/statm 输出解释了 CPU 以及 CPU0 等的每行的每个参数的意思。其中,/proc/pid/statm 的输出结果可以分为两大类:一类是任务虚拟...

    QM-PROC-QMP-10-软件项目需求开发模板(软件需求开发说明书模板)-V4.0.pdf

    V4.0版本的《QM-PROC-QMP-10-软件项目需求开发模板》已经是一个经过多次修订和完善后的正式发布版本,由需求开发团队于2017年完成。 文档中提到的需求开发状态管理是项目管理的重要组成部分,它确保了每个阶段的...

    proc-macro-hack:程序宏位于表达式位置

    在Rust编程语言中,`proc-macro`是一种特殊的宏,它允许开发者在编译时生成代码。这个概念是Rust生态系统中的一个强大工具,尤其是对于实现自定义语法特性或者库的API定制。标题和描述提到的“proc-macro-hack:程序...

    tokio-pg-mapper-Proc-macro库,用于将tokio-postgres行映射到Rust类型(结构)-Rust开发

    tokio-pg-mapper tokio_postgres-mapper是一个proc-macro,旨在使从postgresql表到结构的映射变得简单。 为什么? tokio-pg-mapper可能令人沮丧tokio_postgres-mapper是一个proc-macro,旨在使从postgresql表到结构...

    proc-tools:从各种 proc 读取数据

    从各种/proc/:pid/*文件描述符中读取数据。 安装 $ npm install proc-tools --save 用法 获取进程的/proc/:pid/status 。 var status = require ( 'proc-tools' ) . status status ( process . pid , function ( ...

    SAS-PROC-MIXED.pdf

    混合模型(hybrid model)是几种不同模型组合而成的一种模型。它允许一个项目能沿着最有效的路径发展。也可定义为由固定效应和随机效应(随机误差除外)两部分组成的统计分析模型。如由几个高斯分布混合起来的模型叫...

Global site tag (gtag.js) - Google Analytics