Linux下分析Java程序内存(pmap、jmap、jstat)

Linux命令-查看内存、GC情况及jmap 用法 命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。选项参数。需要打印配置信息的进程ID。产生核心dump的Java可执行文件。需要打印配置信息的核心文件。server-id可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。远程调试服务器的IP地址或主机名。option查看进程的内存映像信息,类似 Solaris pmap 命令。 阅读详情
AI摘要

本文介绍如何使用pmap、jmap及jstat等命令来监控进程内存使用情况及Java进程中的对象分配与垃圾回收状态。包括查看进程内存分布、Java对象统计详情以及JVM的GC情况。

1、pmap查看进程内存

运行命令

使用pmap可以查看某一个进程(非java的也可以)的内存使用使用情况,

命令格式:
pmap 进程id
示例说明
pmap 12358

第一列,内存块起始地址
第二列,占用内存大小
第三列,内存权限
第四列,内存名称,anon表示动态分配的内存,stack表示栈内存
最后一行,占用内存总大小,请注意,此处为虚拟内存大小,占用的物理内存大小可以通过top查看

这里写图片描述

2、jmap查看Java进程对象使用情况

运行命令

使用jmap可以查看某个Java进程中每个对象有多少个实例,占用多少内存,
命令格式:

jmap -histo 进程id
示例说明
jmap -histo  12538

第一列,序号,无实际意义
第二列,对象实例数量
第三列,对象实例占用总内存数,单位:字节
第四列,对象实例名称
最后一行,总实例数量与总内存占用数

这里写图片描述

这里写图片描述

jmap -heap 1024 > jmap-heap-1024.bin

这里写图片描述

3、jstat命令查看jvm的GC情况

jstat命令格式:
jstat [Options] vmid [interval] [count]
参数说明:

Options,选项,我们一般使用 -gcutil 查看gc情况
vmid,VM的进程号,即当前运行的java进程号
interval,间隔时间,单位为秒或者毫秒
count,打印次数,如果缺省则打印无数次

示例说明
jstat -gc 1024 5000

即会每5秒一次显示进程号为1024的java进成的GC情况

这里写图片描述

显示内容说明如下(部分结果是通过其他其他参数显示的,暂不说明):

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
PC:Perm(持久代)的容量 (字节)
PU:Perm(持久代)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
NGCMN:年轻代(young)中初始化(最小)的大小 (字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量 (字节)
OGC:old代当前新生成的容量 (字节)
PGCMN:perm代中初始化(最小)的大小 (字节)
PGCMX:perm代的最大容量 (字节)
PGC:perm代当前新生成的容量 (字节)
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
P:perm代已使用的占当前容量百分比
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)
TT: 持有次数限制
MTT : 最大持有次数限制

Java 堆分为新生代和老年代,新生代一般划分为三块区域,Eden + From Survivor + To Survivor,Eden 和 Survivor 的内存比为8:1,每次只使用一个Eden 和一个 Survivor 区域,另一个 Survivor 用于复制收集算法回收内存。

对象一般尽量分配到新生代中,而对于大对象(长字符串和大数组)直接分配在老年代中,同时“年龄”长的的对象会从新生代自动晋升到老年代中。

Java 方法区称为永久代,只有 HotSpot 虚拟机才存在永久代。

当 Eden 区域分配不足时,自动发生一次 Minor GC。

当发生 Minor GC 时,虚拟机会自动检测(比较)新生代晋升到老年代的对象内存大小和老年代剩余内存大小,如果晋升>剩余,则发生一次Full GC;如果晋升<剩余,则去检测老年代的内存担保 HandlePromotionFailure 是否允许担保失败,如果不允许担保失败,则发生一次Full GC,如果允许失败,则进行一次Minor GC。

内存消耗分析 前言 内存消耗分析请先了解java虚拟机 https://blog.youkuaiyun.com/glamour2015/article/details/104294620 JVM垃圾回收与内存调优 https://blog.youkuaiyun.com/glamour2015/article/details/104241942 常见OOM异常分析 https://blog.youkuaiyun.com/glamour2015/ar... 阅读详情

相关推荐

JVM内存持续升高实战排查:从jstat到MAT定位ConcurrentHashMap泄漏

JVM内存持续升高是Java服务稳定性核心挑战,本质是对象生命周期失控导致堆内存无法有效回收。其原理涉及JVM内存模型分层(堆/元空间/直接内存)、GC行为异常(如OU线性增长、FGCT激增)及对象引用链未释放。技术价值在于避免服务假死、降低P95延迟、提升资源利用率。典型场景包括定时任务高频刷新缓存、静态集合无节制膨胀、ConcurrentHashMap并发扩容死循环等。本文基于真实生产事故,聚焦jstat监控GC节奏、jmap+MAT深挖对象支配树、jstack捕捉线程阻塞点,系统还原从RSS异常到代码

weixin_34007020的博客 324

jvm性能监控工具(jps、jstat、jinfo、jmap、jhat、jstack、jvisualvm和jconsole)介绍及示例

JDK本身提供了很多方便的JVM性能调优监控工具,除了jps、jstat、jinfo、jmap、jhat、jstack等小巧的工具,还有集成式的jvisualvm和jconsole。这些工具在 $JAVA_HOME/bin目录下。

alanchanchn的专栏 8万+

JVM性能优化:jstat、jmap的使用和编程

JVM性能优化:jstat、jmap的使用和编程JVM(Java虚拟机)是Java语言的核心组件,负责解释和执行Java字节码。为了保证应用程序在JVM上获得最佳性能,需要进行一些调优操作。本文将介绍如何使用jstat和jmap这两个命令行工具来监测和分析JVM的性能,并提供相应的示例代码。

2301_79326254的博客 530

jps、jstack、jstat、jmap、jinfo等小工具的使用以及故障排查

jps、jstack、jmap、jstat等小工具的使用以及故障排查

weixin_43849415的博客 6135

jvm信息jmap使用的基本方法教程

JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,下面这篇文章主要给大家介绍了关于jvm信息jmap使用的基本方法教程,需要的朋友可以参考下

滚动轴承振动信号特征解析与故障诊断模型构建

本文深入解析了滚动轴承振动信号的三大来源与特征,并详细阐述了从时域、频域到时频域的特征提取方法。通过构建基于机器学习(如随机森林、SVM)或深度学习的故障诊断模型,结合实战代码示例,为设备维护工程师提供了一套从信号分析到智能诊断的完整解决方案,旨在实现精准的故障识别与预测性维护。

qsc901234567的博客 368

linux下分析Java程序内存汇总

使用pmap查看进程内存 运行命令 使用pmap可以查看某一个进程(非java的也可以)的内存使用使用情况, 命令格式: pmap 进程id 示例说明 例如运行: pmap 12358 显示结果如下图(内容较多, 分成几张图说明): 内容开始部分 内容结束部分 上图中, 第一列,内存块起始地址 第二列,占用内存大小 第三列,内存权限 第四列,内存名称,

zlzlei的专栏 2万+

大数据架构中的数据血缘追踪技术解析

数据血缘(Data Lineage)是指数据从源头到目标的完整流转路径,它记录了数据在整个生命周期中的变化过程。在大数据架构中,数据血缘追踪技术已经成为数据治理的核心组成部分。本文旨在全面解析数据血缘追踪的技术原理、实现方法和应用实践,帮助读者深入理解这一关键技术。本文将从基础概念入手,逐步深入到技术实现细节,最后探讨实际应用和未来趋势。数据血缘的核心概念和技术原理数据血缘的数学模型和算法实现实际项目案例和代码解析主流工具和解决方案比较未来发展方向和技术挑战。

架构师的AI之路,分享AI应用开发架构的学习与实践。 688

java 内存情况_分析java内存情况

使用pmap查看进程内存运行命令使用pmap可以查看某一个进程(非java的也可以)的内存使用使用情况,命令格式:pmap 进程id示例说明例如运行:pmap 12358显示结果如下图(内容较多, 分成几张图说明):内容开始部分内容结束部分上图中,第一列,内存块起始地址第二列,占用内存大小第三列,内存权限第四列,内存名称,anon表示动态分配的内存,stack表示栈内存最后一行,占用内存总大小,请...

weixin_42366095的博客 387

深入SVT SPI VIP配置:如何灵活控制CS间隔、数据帧大小与时钟频率(含代码片段)

本文深入探讨了SVT SPI VIP的高级配置技巧,包括精确控制CS信号间隔、突破数据帧大小限制以及动态时钟频率切换。通过实战代码片段和详细配置步骤,帮助验证工程师灵活应对复杂SPI协议验证场景,提升验证效率和覆盖率。特别适合需要处理非标准SPI时序和特殊数据帧的芯片验证项目。

weixin_27014595的博客 280

SAP S4HANA F-02报错:更正统一日记账分类账的定制设置

消息号 FINS_ACDOC_CUST201 使用FINS_CUST_CONS_CHK_P去检查公司代码和分类账的设置 提示:过账期间变式为空(分类账 E1/公司代码 7500) 检查了表FINSC_LD_CMP 显示有分类账未分配过账期间变式 解决:后台配置定义分类账和货币类型的设置把过账变式维护下 路径:财务会计→财务会计全局设置→分类账→分类账→定义分类账和货币类型的设置 选中需要维护的分类账双击左侧的“分类账的公司代码设置”,找到对应的公司代码维护上即可。

qq_45068743的博客 6448

linux下分析java程序占用内存、CPU过高

内存过高分析 使用pmap查看进程内存 命令格式:pmap 进程id 第一列。内存块起始地址 第二列。占用内存大小 第三列,内存权限 第四列。内存名称。anon表示动态分配的内存,stack表示栈内存 最后一行。占用内存总大小,请注意,此处为虚拟内存大小,占用的物理内存大小能够通过top查看 使用jmap查看Java进程对象使用情况 命令格式:jmap -histo 进程id 第一列,序号。 第二列,对象实例数量 第三列,对象实例占用总内存数。单位:字节 第四列,对象实例名称 最.

Bertram的博客 5265

从数据手册到代码:一步步解读SC7A20寄存器配置与加速度值换算原理

本文详细解析了SC7A20三轴加速度传感器的寄存器配置与加速度值换算原理。从数据手册出发,逐步拆解关键寄存器设置,并推导原始ADC值到物理加速度的完整换算过程,帮助开发者深入理解传感器底层工作原理,提升嵌入式开发效率。

weixin_29179311的博客 366

Java应用Top命令RES内存跟jmap, jstat数据对不上分析

Java应用Top命令RES内存占用高分析 ps aux命令执行结果的几个列的信息的含义 USER 进程所属用户 PID 进程ID %CPU 进程占用CPU百分比 %MEM 进程占用内存百分比 VSZ 虚拟内存占用大小 单位:kb(killobytes) RSS 实际内存占用大小 单位:kb(killobytes) TTY 终端类型 STAT 进程状态 START 进程启动时刻 TIME 进程运行时长,进程已经消耗的CPU时间 COM

我是guyue,guyue就是我O(∩_∩)O 7471

Vivado 2021.1 实战:手把手教你用IEEE1735 V2加密你的Verilog源码(附完整TCL命令)

本文详细介绍了在Vivado 2021.1中使用IEEE1735 V2标准加密Verilog源码的全流程,包括许可证申请、密钥文件配置、TCL命令执行及加密后验证。通过实战步骤和完整TCL命令,帮助开发者有效保护FPGA设计知识产权,确保核心算法安全。

weixin_42706667的博客 191

【Codesys】获取从站信息,判断是否从站断联,总线丢失

获取EtherCAT从站信息,判断是否从站断联,总线丢失

qq_35316470的博客 5731

linux分析java内存,linux下分析Java程序内存汇总

使用pmap查看进程内存运行命令使用pmap可以查看某一个进程(非java的也可以)的内存使用使用情况,命令格式:pmap 进程id示例说明例如运行:pmap 12358显示结果使用pmap查看进程内存运行命令使用pmap可以查看某一个进程(非java的也可以)的内存使用使用情况,命令格式:pmap 进程id示例说明例如运行:pmap 12358显示结果如下图(内容较多, 分成几张图说明):内容开...

weixin_30692969的博客 489

逆向工具:一文讲述 Ghidra 的详细使用

Ghidra是由NSA开源的一款功能强大的逆向工程框架,支持多平台、多架构和多种文件格式分析。本文详细介绍了Ghidra的核心优势、安装配置方法、主界面功能模块,并通过一个CrackMe示例演示了完整的逆向分析流程。文章还讲解了高级功能如交叉引用、控制流图分析、数据类型重建和脚本自动化等,最后提供了常见文件格式的分析技巧。作为IDA Pro的免费替代方案,Ghidra适合个人学习、教学和中小项目使用。(149字)

数据知道的博客 4343

debug分析问题 jps jmap jstat starce pmap pstack

linux系统下 pstree:树结构显示进程 ps -Lf pid 查看有多少子进程   pmap  查看进程占用内存  Usage: pmap [-x | -d] [-q] pid... -x  show details -d  show offset and device number -q  quiet; less header/footer info -V  sho...

sunqi 275

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux内存占用分析

ps aux命令执行结果的几个列的信息的含义 USER 进程所属用户 PID 进程ID %CPU 进程占用CPU百分比 %MEM 进程占用内存百分比 VSZ 虚拟内存占用大小 单位:kb(killobytes) RSS 实际内存占用大小 单位:kb(killobytes) TTY 终端类型 STAT 进程状态 START 进程启动时刻 TIME 进程运行时长,进程已经消耗的CPU时间 COMMAND 启动进程的命令的名称和参数 top

一屁小肥羊的专栏 2951

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java —— 内存泄露排查

最近发现服务器内存使用持续增长且增长速率大,怀疑是内存泄露导致的。 最终定位到是因为程序中存在线程池频繁创建但未销毁问题导致线程泄露,进而影响内存使用增长。 Tips:本文不记录排错过程,只记录可疑点及排错命令。 1. 套路 ① 查看内存使用,对相隔一段时间的应用内存使用情况进行对比(top命令等),确认内存存在缓慢上升的情况 ② jstat -gccapacity 【pid】查看JVM各部分内存使用增长是否符合top命令展示的应用内存使用增长。 如果符合,则使用MAT工具分析JVM堆栈情况,

简简单单记录 3113

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 还原 OS X 中的 DNS 缓存设置
下一篇: mac连接到apple ID服务器时出错解决方案之一
极客世杰
博客等级 码龄11年 51粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值