`
can_do
  • 浏览: 248778 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Do家】通过pmap命令解读jvm内存占用情况

阅读更多
1、执行Linux的pmap命令,采集到如下数据:
# pmap -x 87|more

87: /usr/local/java/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms4G -Xmx4G -Xmn1G -Xss512k -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024
Address           Kbytes     PSS   Dirty    Swap  Mode  Mapping
0000000000400000       4       1       0       0  r-xp  /usr/local/java/jre/bin/java
0000000000600000       4       4       4       0  r--p  /usr/local/java/jre/bin/java
0000000000601000       4       4       4       0  rw-p  /usr/local/java/jre/bin/java
0000000002271000    6392    6196    6196       0  rw-p  [heap]
00000006c0800000 4221440 3285332 3285332       0  rw-p    [ anon ]
00000007c2280000 1021440       0       0       0  ---p    [ anon ]
00007f6a0d22a000    1280     996     996       0  rw-p    [ anon ]
00007f6a0d36a000     768       0       0       0  ---p    [ anon ]
00007f6a0d42a000    2048    1980    1980       0  rw-p    [ anon ]
00007f6a0d62a000    2048    2044    2044       0  rw-p    [ anon ]
00007f6a0d82a000    2048    2040    2040       0  rw-p    [ anon ]
00007f6a0da2a000    2048    2044    2044       0  rw-p    [ anon ]
00007f6a0dc2a000      12       0       0       0  ---p    [ anon ]
00007f6a0dc2d000     504       8       8       0  rw-p    [ anon ]
00007f6a0dcab000      12       0       0       0  ---p    [ anon ]
00007f6a0dcae000     504      12      12       0  rw-p    [ anon ]
00007f6a0dd2c000      12       0       0       0  ---p    [ anon ]
00007f6a0dd2f000     504       8       8       0  rw-p    [ anon ]
00007f6a0ddad000      12       0       0       0  ---p    [ anon ]
00007f6a0ddb0000     504       8       8       0  rw-p    [ anon ]
00007f6a0de2e000      12       0       0       0  ---p    [ anon ]

2、通过os命令分析Java进程中包含线程数据
# cat /proc/87/status |grep Threads

Threads:        292
# pmap -x 87 |awk -F' ' '{print $2}' |grep 504 |wc -l

298

线程数量:292
3、通过status统计的Java进程实际物理内存占用,参见VmRSS参数
 # cat /proc/88/status |grep Vm

VmPeak: 12399068 kB
VmSize: 12289588 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:   3105500 kB
VmRSS:   3103724 kB
VmData:  7152972 kB
VmStk:       244 kB
VmExe:         4 kB
VmLib:     18152 kB
VmPTE:      6700 kB
VmSwap:        0 kB

VmRSS=>3103724KB

4、通过pmap统计的Java进程实际占用物理内存,参见PSS参数
# pmap -x 88 |grep total

total            12289592 3098242 3078148

PSS=>3098242
5、解读如下:
1> JVM中heap占用空间,体现为:
00000006c0800000 4221440 3285332 3285332       0  rw-p    [ anon ]
主要关注PSS这列,由于heap采用了固定大小,-Xms4G -Xmx4G,os预留给Java进程的Heap大小为:4221440KB

2> JVM中CompressedClassSpaceSize,体现为:
00000007c2280000 1021440       0       0       0  ---p    [ anon ]
JVM默认的参数CompressedClassSpaceSize,压缩的类空间大小为1024KB

3> JVM中线程的栈占用的空间大小,512KB,即通过参数控制-Xss512k,体现为:
00007f6a0dc2d000     504       8       8       0  rw-p    [ anon ]
00007f6a0dcab000      12       0       0       0  ---p    [ anon ]
由于线程栈是每个线程独占的,占用空间取决于线程的数量,所以会出现重复的该数据段。

4> 其他的MetaSpace和本地内存使用,在pmap也有对应分配地址体现

【小结】
1> PSS实际上稍大于RSS,都是体现Java进程实际占用的物理内存大小;
2> 如果Java进程占用物理内存利用率高,与是否FGC无关;考虑线程数波动和本地内存的消耗,一般Heap都是固定大小的;
3> 从os角度,内存划分给Java进程后,即便是空间回收了,但是os也会预留该空间,认为此空间由进程使用中;
4> mapping为anon,即anonymous memory mappings,匿名内存映射,由os动态分配内存出去的空间;

【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:

分享到:
评论

相关推荐

    [PHP] pmap可以查看进程占用内存的详细情况

    [PHP] pmap可以查看进程占用内存的详细情况

    pmap命令 显示进程的内存映像

    pmap命令主要用于显示进程的地址空间,除了指定进程,如果不加任何选项,pmap命令将会显示指定进程每个内存映像的起始地址、虚拟内存的大小、进程的访问地址空间的权限,以及内存映射文件等。 语法格式:pmap [参数]...

    linux中 pmap 命令详解

    主要介绍了linux中 pmap 命令详解,需要的朋友可以参考下

    Linux性能测试 pmap命令详解

    pmap命令用于显示一个或多个进程的内存状态,下面通过本文给大家分享Linux性能测试 pmap命令详解,需要的朋友参考下吧

    python获取系统内存占用信息的实例方法

    它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、...

    深入理解linux下查看进程内存的使用情况

    代码如下:1、top命令top -d 1 -p pid [,pid …] //设置为delay 1s,默认是delay 3s如果想根据内存使用量进行排序,可以shift + m(Sort by memory usage)静态查看一个进程的内存使用 代码如下:1、pmap命令pmap pid...

    linux监控工具汇总

    linux监控工具汇总,包括top、vmstat、sar、uptime、ps、free、iostat、mpstat、numastat、pmap netstat、iptraf等监控工具的纤细说明和瓶颈分析。

    panmap1234

    如果在运行某软件或编译程序时提示缺少 找不到panmap dll等类似提示 您可将从脚本之家下载来的panmap dll拷贝到指定目录即可 一般是system系统目录或放到软件同级目录里面 或者重新添加文件引用

    pMap:通过广播和多播Tr发现,扫描和指纹-开源

    通过它们产生的背景噪声(即,它们的广播和多播流量)来被动地发现,扫描和指纹识别本地链接对等体

    Java 内存分析

    Java 内存分析,帮助初学者java程序内部对象创建,与消除的原理。

    pMap:通过广播和多播传输的发现、扫描和指纹识别-开源

    通过它们产生的背景噪声(即它们的广播和多播流量)被动地发现、扫描和指纹链路本地对等点

    celluloid-pmap:使用赛璐ul期货的平行地图

    赛璐oid :: Pmap 使用赛璐ul的并行映射 赛璐oid期货非常恶心,当与pmap实现和主管一起使用以减少最大线程数时,您... pmap ( 4 ) do | user | ActiveRecord :: Base . connection_pool . with_connection { user . d

    erlang_lpc:Erlang 的高度并行本地 RPC 式 pmap 执行框架

    最终结果是一个高度并行的本地 RPC 风格的 pmap 执行框架。 这意味着在 OTP 应用程序中使用,主管负责管理子进程。 用法 bar_fun(X, F) -> F(X). do_blocking_work() -> % Blocking call to lpc:pmap/3 lpc:...

    linux3.zip-linux3.zip

    查看内存使用情况 - free 虚拟内存统计 - vmstat CPU信息统计 - mpstat 查看进程使用内存状况 - pmap 报告设备CPU和I/O统计信息 - iostat 显示所有PCI设备 - lspci 显示进程间通信设施的状态 – ipcs 任务二 vi/vim...

    Linux系统性能优化命令与工具大全

    linux系统下性能监控及优化工具集,有vmstat、sar、iostat、uptime、free、watch、top、gtop、dmesg、pmap和strace等等,如果上面这些命令你都没有听过,那还等什么呢,赶紧学吧。

    pmap_8921_01:Data Viz课程分配1

    pmap_8921_01:Data Viz课程分配1

    Tencent_apt:【腾讯开源】Android性能测试工具APT

    另外还支持自动获取内存快照、PMAP文件分析等,方便开发人员自测或者测试人员完成性能测试,快速发现产品问题。功能摘要1.支持多进程的CPU测试,并提供top和dumpsys cpuinfo两种方式.2.支持多进程的内存测试,并支持...

    babashka:用于Bash灰色区域的Clojure babushka(本地快速启动的Clojure脚本环境)

    一种Bash灰色区域的Clojure 。 生命太短了,以至于不...多线程支持( pmap , future ) 包含电池(tools.cli,柴郡等) 非目标 性能 提供混合的Clojure / Bash DSL(请参阅可移植性)。 更换现有的外壳。 Babash

    U盘安装系统

    在VSS中可以实现一个文件被多个项目共享(share)。在一个项目中对文件的改动可以自动反映到其他共享的项目中去。拆分(branch)是将文件从原来共享的项目中分离出来的过程。它使得VSS可以实现从不同的路径追踪文件

Global site tag (gtag.js) - Google Analytics