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动态分配内存出去的空间;
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:
分享到:
相关推荐
通过查看 pmap 命令的输出结果,我们可以了解 PHP 进程的内存占用情况,了解 PHP 扩展占用内存的情况,从而方便地进行问题查询和诊断。 在实际应用中,我们可以使用 pmap 命令来查看 PHP 进程的内存占用情况,了解 ...
"查看LINUX进程内存占用情况" ...top、pmap 和 ps 命令都是查看 Linux 进程内存占用情况的常用命令,每个命令都有其特点和优势,选择合适的命令可以帮助开发者和系统管理员更好地管理和优化系统性能。
通过查看进程内存占用情况,可以了解系统中进程的资源占用状况,故障排查和性能优化。下面是查看 LINUX 进程内存占用情况的多种方法: 1. 使用 top 命令 top 命令是 Linux 下常用的性能分析工具,能够实时显示系统...
在 Java 进程中,高内存占用是一个常见的问题,本文将通过 jmap 和 ps 命令来分析 Java 进程的内存占用情况,并讨论可能的优化方法。 1. Java 进程的内存占用分析 使用 jmap 命令可以查看 Java 进程的内存占用情况...
本文将深入探讨Linux内存结构和JVM内存模型,以及如何通过提供的文件来分析它们。 首先,让我们了解Linux内存结构。Linux内存主要分为以下几个部分: 1. **物理内存**:这是计算机硬件中的RAM,用于存储正在运行的...
pmap命令主要用于显示进程的地址空间,除了指定进程,如果不加任何选项,pmap命令将会显示指定进程每个内存映像的起始地址、虚拟内存的大小、进程的访问地址空间的权限,以及内存映射文件等。 语法格式:pmap [参数]...
本文将详细介绍如何使用几个关键工具来查看Linux进程的内存占用情况。 首先,`top`命令是Linux下最常用且直观的性能监控工具,它能够实时显示系统中每个进程的资源使用状况,包括CPU占用率、内存占用率等。在`top`...
`pmap` 是 Linux 系统中一个强大的命令行工具,用于显示进程的内存映射情况。这个命令可以帮助系统管理员和开发者了解进程如何使用物理内存,包括共享库、堆、栈和其他内存区域的详细信息。在本文中,我们将深入探讨...
1. **监控内存使用**:通过定期运行`pmap`命令,可以监控特定进程的内存使用情况,及时发现潜在的内存泄漏问题。 2. **性能调优**:分析不同内存段的权限和映射文件,有助于识别哪些共享库或代码段消耗了大量的内存...
另一个重要的参数是`-XX:OnError`,它允许我们在JVM崩溃时执行自定义的命令,比如`pmap %p`用于显示进程的内存映射,或者`gcore %p; dbx - %p`用于生成核心转储并启动调试器。在Linux中,这些命令会在子进程中执行,...
* 查看当前用户程序实际内存占用,并排序:使用 `pmap` 命令查看当前用户程序实际内存占用,并排序 * 统计程序的内存耗用:使用 `pmap` 命令统计程序的内存耗用 * 按内存从大到小排列进程:使用 `pmap` 命令按内存从...
`top`命令会以全屏交互模式显示系统信息,包括每个进程的CPU使用率、内存占用情况等。要退出`top`,只需按下`q`键。在`top`界面中,你可以看到如下信息: 1. **PID**: 进程的唯一标识符。 2. **USER**: 进程的所有...
`top`命令是Linux下最常用的实时监控系统资源的工具之一,它能提供详细的进程资源消耗信息,包括CPU使用率、内存占用、进程状态等。在CentOS等Linux发行版中,可以简单地通过在终端输入`top`来启动这个命令。 `top`...
`pmap`命令可以详细展示进程的内存映射情况,而`ps`命令可以提供更灵活的进程信息筛选,如按内存使用量排序。 在处理性能问题时,观察`load average`尤为重要,这是系统在特定时间范围内(1分钟、5分钟、15分钟)的...
按下`Shift + m`可以在列表中按内存使用量进行排序,便于找出内存占用高的进程。 其次,`pmap`命令用于显示进程的内存映射。例如,`pmap pid`会列出指定进程的内存分配详情,包括虚拟内存的大小、共享库、堆栈等...
在`top`的进程列表中,每一列都有特定含义,如PID(进程ID)、USER(进程所有者)、%CPU(CPU占用率)、%MEM(内存占用率)、VIRT(虚拟内存大小)、RSS(物理内存大小)、COMMAND(进程命令)。这些信息可以帮助...
在优化内存使用时,除了关注单个进程的内存占用,还要考虑系统的整体内存压力,如空闲内存、缓存和交换活动。合理的内存管理策略可以帮助保持系统的高效运行,避免不必要的交换活动,从而提高性能。同时,理解和监控...
free命令可以显示内存的详细使用情况,包括物理内存、缓冲区和缓存。高cache值通常意味着文件系统效率高,但如果内存不足,系统可能会将内存交换到磁盘,导致性能下降。在这种情况下,可以使用pmap来查看进程的内存...