`
can_do
  • 浏览: 263490 次
  • 性别: 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可以查看进程占用内存的详细情况

    通过查看 pmap 命令的输出结果,我们可以了解 PHP 进程的内存占用情况,了解 PHP 扩展占用内存的情况,从而方便地进行问题查询和诊断。 在实际应用中,我们可以使用 pmap 命令来查看 PHP 进程的内存占用情况,了解 ...

    查看LINUX进程内存占用情况.docx

    "查看LINUX进程内存占用情况" ...top、pmap 和 ps 命令都是查看 Linux 进程内存占用情况的常用命令,每个命令都有其特点和优势,选择合适的命令可以帮助开发者和系统管理员更好地管理和优化系统性能。

    查看LINUX进程内存占用情况

    通过查看进程内存占用情况,可以了解系统中进程的资源占用状况,故障排查和性能优化。下面是查看 LINUX 进程内存占用情况的多种方法: 1. 使用 top 命令 top 命令是 Linux 下常用的性能分析工具,能够实时显示系统...

    JAVA进程占用高内存缘由分析与优化方法_.docx

    在 Java 进程中,高内存占用是一个常见的问题,本文将通过 jmap 和 ps 命令来分析 Java 进程的内存占用情况,并讨论可能的优化方法。 1. Java 进程的内存占用分析 使用 jmap 命令可以查看 Java 进程的内存占用情况...

    linux & JVM内存结构分析

    本文将深入探讨Linux内存结构和JVM内存模型,以及如何通过提供的文件来分析它们。 首先,让我们了解Linux内存结构。Linux内存主要分为以下几个部分: 1. **物理内存**:这是计算机硬件中的RAM,用于存储正在运行的...

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

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

    Linux查看进程的内存占用情况.pdf

    本文将详细介绍如何使用几个关键工具来查看Linux进程的内存占用情况。 首先,`top`命令是Linux下最常用且直观的性能监控工具,它能够实时显示系统中每个进程的资源使用状况,包括CPU占用率、内存占用率等。在`top`...

    linux中 pmap 命令详解

    `pmap` 是 Linux 系统中一个强大的命令行工具,用于显示进程的内存映射情况。这个命令可以帮助系统管理员和开发者了解进程如何使用物理内存,包括共享库、堆、栈和其他内存区域的详细信息。在本文中,我们将深入探讨...

    Linux性能测试 pmap命令详解

    1. **监控内存使用**:通过定期运行`pmap`命令,可以监控特定进程的内存使用情况,及时发现潜在的内存泄漏问题。 2. **性能调优**:分析不同内存段的权限和映射文件,有助于识别哪些共享库或代码段消耗了大量的内存...

    jvm crash的崩溃日志详细分析及注意点

    另一个重要的参数是`-XX:OnError`,它允许我们在JVM崩溃时执行自定义的命令,比如`pmap %p`用于显示进程的内存映射,或者`gcore %p; dbx - %p`用于生成核心转储并启动调试器。在Linux中,这些命令会在子进程中执行,...

    ubuntu命令手册.pdf

    * 查看当前用户程序实际内存占用,并排序:使用 `pmap` 命令查看当前用户程序实际内存占用,并排序 * 统计程序的内存耗用:使用 `pmap` 命令统计程序的内存耗用 * 按内存从大到小排列进程:使用 `pmap` 命令按内存从...

    Linux查看CPU和内存使用情况.docx

    `top`命令会以全屏交互模式显示系统信息,包括每个进程的CPU使用率、内存占用情况等。要退出`top`,只需按下`q`键。在`top`界面中,你可以看到如下信息: 1. **PID**: 进程的唯一标识符。 2. **USER**: 进程的所有...

    Linux查看CPU和内存使用情况(top).pdf

    `top`命令是Linux下最常用的实时监控系统资源的工具之一,它能提供详细的进程资源消耗信息,包括CPU使用率、内存占用、进程状态等。在CentOS等Linux发行版中,可以简单地通过在终端输入`top`来启动这个命令。 `top`...

    Linux查看CPU和内存使用情况.pdf

    `pmap`命令可以详细展示进程的内存映射情况,而`ps`命令可以提供更灵活的进程信息筛选,如按内存使用量排序。 在处理性能问题时,观察`load average`尤为重要,这是系统在特定时间范围内(1分钟、5分钟、15分钟)的...

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

    按下`Shift + m`可以在列表中按内存使用量进行排序,便于找出内存占用高的进程。 其次,`pmap`命令用于显示进程的内存映射。例如,`pmap pid`会列出指定进程的内存分配详情,包括虚拟内存的大小、共享库、堆栈等...

    查看Linux进程占用的资源.docx

    在`top`的进程列表中,每一列都有特定含义,如PID(进程ID)、USER(进程所有者)、%CPU(CPU占用率)、%MEM(内存占用率)、VIRT(虚拟内存大小)、RSS(物理内存大小)、COMMAND(进程命令)。这些信息可以帮助...

    理解Linux进程的内存使用量

    在优化内存使用时,除了关注单个进程的内存占用,还要考虑系统的整体内存压力,如空闲内存、缓存和交换活动。合理的内存管理策略可以帮助保持系统的高效运行,避免不必要的交换活动,从而提高性能。同时,理解和监控...

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

    free命令可以显示内存的详细使用情况,包括物理内存、缓冲区和缓存。高cache值通常意味着文件系统效率高,但如果内存不足,系统可能会将内存交换到磁盘,导致性能下降。在这种情况下,可以使用pmap来查看进程的内存...

Global site tag (gtag.js) - Google Analytics