JVM线上常用参数、常用工具以及异常排查

JVM 内存分析工具 - MAT 文章目录1 简介2 使用2.1 准备 MAT2.2 准备堆转储文件(Heap Dump)2.3 分析堆转储文件2.3.1 Histogram2.3.2 Leak Suspects2.3.3 内存快照对比 MAT(Memory Analyzer Tools)是一个快速且功能丰富的 Java 堆分析器,可帮助您查找内存泄漏并减少内存消耗。使用 MAT 分析具有数亿个对象的高效堆转储,快速计算对象的保留大小,查看谁阻止垃圾收集器收集对象,运行报告以自动提取泄漏嫌疑者。 1 简介 MAT 是一款非常强大的内存分析工 阅读详情

数据区设置

  • Xms:初始堆大小
  • Xmx:最大堆大小
  • Xss:Java 每个线程的Stack大小
  • XX:NewSize=n:设置年轻代大小
  • XX:NewRatio=n:设置年轻代和年老代的比值。如:为 3,表示年轻代与年老代比值为 1:3,年轻代占整个年轻代年老代和的 1/4。
  • XX:SurvivorRatio=n:年轻代中 Eden 区与两个 Survivor 区的比值。注意 Survivor区有两个。如:3,表示 Eden:Survivor=3:2,一个 Survivor 区占整个年轻代的 1/5。
  • XX:MaxPermSize=n:设置持久代大小。

收集器设置

  • XX:+UseSerialGC:设置串行收集器
  • XX:+UseParallelGC::设置并行收集器
  • XX:+UseParalledlOldGC:设置并行年老代收集器
  • XX:+UseConcMarkSweepGC:设置并发收集器
  • XX:+UseG1GC:G1收集器,Java9默认开启,无需设置

注:服务端jvm参数调优可移步------->:https://blog.youkuaiyun.com/Vincent2014Linux/article/details/90211192

JVM 提供的常用工具

1、jps:用来显示本地的 Java 进程,可以查看本地运行着几个 Java 程序,并显示他们的进程号。
命令格式:jps

2、jinfo:运行环境参数:Java System 属性和 JVM 命令行参数,Java class path 等信息。
命令格式:jinfo 进程 pid

3、jstat:监视虚拟机各种运行状态信息的命令行工具。
命令格式:jstat -gc 123 250 20

4、jstack:可以观察到 JVM 中当前所有线程的运行情况和线程当前状态。
命令格式:jstack 进程 pid

5、jmap:观察运行中的 JVM 物理内存的占用情况(如:产生哪些对象,及其数量)。
命令格式:jmap [option] pid
-dump:[live,]format=b,file= 使用hprof二进制形式,输出jvm的heap内容到文件, live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计 活的对象数量.
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
使用示例:jmap -heap 27900 # 展示pid的整体堆信息如下:

[root@localhost ~]# jmap -heap 27900
Attaching to process ID 27900, please wait...
Debugger attached successfully.
Client compiler detected.
JVM version is 20.45-b01
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration: #堆内存初始化配置
   MinHeapFreeRatio = 40     #-XX:MinHeapFreeRatio设置JVM堆最小空闲比率  
   MaxHeapFreeRatio = 70   #-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率  
   MaxHeapSize = 100663296 (96.0MB)   #-XX:MaxHeapSize=设置JVM堆的最大大小
   NewSize = 1048576 (1.0MB)     #-XX:NewSize=设置JVM堆的'新生代'的默认大小
   MaxNewSize = 4294901760 (4095.9375MB) #-XX:MaxNewSize=设置JVM堆的'新生代'的最大大小
   OldSize = 4194304 (4.0MB)  #-XX:OldSize=设置JVM堆的'老生代'的大小
   NewRatio = 2    #-XX:NewRatio=:‘新生代’和'老生代'的大小比率
   SurvivorRatio = 8  #-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
   PermSize = 12582912 (12.0MB) #-XX:PermSize=<value>:设置JVM堆的'持久代'的初始大小  
   MaxPermSize = 67108864 (64.0MB) #-XX:MaxPermSize=<value>:设置JVM堆的'持久代'的最大大小  
Heap Usage:
New Generation (Eden + 1 Survivor Space): #新生代区内存分布,包含Eden+1个Survivor区
   capacity = 30212096 (28.8125MB)
   used = 27103784 (25.848182678222656MB)
   free = 3108312 (2.9643173217773438MB)
   89.71169693092462% used
Eden Space: #Eden区内存分布
   capacity = 26869760 (25.625MB)
   used = 26869760 (25.625MB)
   free = 0 (0.0MB)
   100.0% used
From Space: #其中一个Survivor区的内存分布
   capacity = 3342336 (3.1875MB)
   used = 234024 (0.22318267822265625MB)
   free = 3108312 (2.9643173217773438MB)
   7.001809512867647% used
To Space: #另一个Survivor区的内存分布
   capacity = 3342336 (3.1875MB)
   used = 0 (0.0MB)
   free = 3342336 (3.1875MB)
   0.0% used
tenured generation:   #当前的Old区内存分布  
   capacity = 67108864 (64.0MB)
   used = 67108816 (63.99995422363281MB)
   free = 48 (4.57763671875E-5MB)
   99.99992847442627% used
Perm Generation:     #当前的 '持久代' 内存分布
   capacity = 14417920 (13.75MB)
   used = 14339216 (13.674942016601562MB)
   free = 78704 (0.0750579833984375MB)
   99.45412375710227% used

异常排查

  • CPU 资源占用过高
    1、top 查看当前 CPU 情况,找到占用 CPU 过高的进程 PID=123。
    2、top -H -p123 找出两个 CPU 占用较高的线程,记录下来 PID=2345, 3456 转换为十六进制。
    3、jstack -l 123 > temp.txt 打印出当前进程的线程栈。
    4、查找到对应于第二步的两个线程运行栈,分析代码。

  • OOM 异常排查
    1、使用 top 指令查询服务器系统状态。
    2、ps -aux|grep java 找出当前 Java 进程的 PID。
    3、jstat -gcutil pid interval 查看当前 GC 的状态。
    4、jmap -histo:live pid 可用统计存活对象的分布情况,从高到低查看占据内存最多的对象。
    5、jmap -dump:format=b,file= 文件名 [pid] 利用 Jmap dump。
    6、使用性能分析工具对上一步 dump 出来的文件进行分析,工具有 MAT 等。

使用 Memory Analyzer ( MAT ) 工具分析内存 (一) 使用 SDK 中的 hprof-conv.exe 工具 , 可以将上述 hprof 文件转为 MAT 工具可以识别的文件 , 工具所在目录的路径为 platform-tools , 将该目录配置到环境变量中 , 即可在命令窗口使用该工具。执行如下命令 : 将 memory-XXX.hprof 内存快照文件转换为 MAT 格式的内存文件 , 最终存储在 mat.hprof 文件中 , 其中加入 -z 选项 , 表示排除非 APP 内存信息; 阅读详情

相关推荐

从MAT到VisualVM:5款主流.hprof文件分析工具横评与实战选型指南

本文全面评测了5款主流.hprof文件分析工具,包括Eclipse MAT、VisualVM、JProfiler、YourKit和FastThread,帮助开发者根据实际需求选择最佳工具组合。针对Java虚拟机堆转储文件分析,详细介绍了各工具的核心功能、适用场景及实战选型策略,特别提供了处理大型.hprof文件的高级技巧和内存泄漏排查工作流。

weixin_28347369的博客 436

hprof文件免费工具MAT使用(OOM异常分析)

jdk1.8建议下载1.11.0版本。

Lyh_2015的博客 2781

线上JVM排查与优化

本文介绍了线上JVM常见问题及排查方法。主要工具包括JDK内置的jps、jstat、jmap、jstack和jcmd,以及可视化工具VisualVM、MAT和Arthas。重点分析了CPU使用率高、OOM、GC问题和线程阻塞等问题的解决步骤:如使用jstack分析高CPU线程,jmap生成堆转储排查OOM,jstat监控GC情况优化内存参数,以及通过线程栈分析死锁。文章还提供了GC日志分析建议和启动参数配置,帮助开发者快速定位线上JVM问题。

m0_62967939的博客 1059

hprof文件分析工具_Java 程序该怎么优化?工具篇

程序员:为什么程序总是那么慢?时间都花到哪里去了?面试官:若你写的 Java 程序,出现了性能问题,该怎么去排查呢?工欲善其事必先利其器,为你呈上一箩筐性能优化工具,必有一款满足你,废话不多说,直奔主题。1. hprof 工具hprof 工具是通过织入监控代码,来对 Java 程序进行监控的一款工具。可以监控 Java 程序在运行时占用的 CPU,及统计堆内存使用等。例如:每隔 10 毫秒采样 C...

weixin_39529302的博客 5268

纯干货:线上出现fullGC次数很多的排查思路以及实践总结

最近线上发布了一个版本,导致full gc次数忽然就上去了,虽然对线上业务造成的影响还不是很大,但是为了以防万一还是对这个问题做了相关排查。 GC命令排查 一开始还是从堆的变化开始: # 查看每秒的堆发生的变化以及gc的次数 jstat -gcutil pid 1000 相关参数: s0 : Heap上的 Survivor space 0 区已使用空间的百分比 s1 : Heap上的 S...

长沙要起风了、 7387

线上问题CPU过高怎么排查

监控与日志收集:确认 CPU 高的时间段和对应的系统日志、GC 日志。线程和 JVM 层面分析:采集线程 dump,通过 jstack、JVisualVM 等工具找到高 CPU 线程,查看调用栈。代码与依赖排查:定位热点代码、检查第三方依赖和数据库调用。资源与环境检查:排查硬件、网络及其他系统资源竞争问题。通过以上步骤,结合监控工具和 JVM 分析工具,可以逐步缩小问题范围,找到导致 CPU 占用过高的根本原因,并针对性地进行优化或修复。

longgelaile的博客 1069

hprof文件分析工具_JVM线上常用参数、常用工具以及异常排查

数据区设置Xms:初始堆大小Xmx:最大堆大小Xss:Java 每个线程的Stack大小XX:NewSize=n:设置年轻代大小XX:NewRatio=n:设置年轻代和年老代的比值。如:为 3,表示年轻代与年老代比值为 1:3,年轻代占整个年轻代年老代和的 1/4。XX:SurvivorRatio=n:年轻代中 Eden 区与两个 Survivor 区的比值。注意 Survivor区有两个。如:3...

weixin_39995280的博客 844

dump文件分析工具,.hprof memoryanalyzer_v1.5.0.rar

dump文件分析工具 memoryanalyzer_v1.5.0.rar

Java 应用线上问题排查思路、常用工具小结

终极手撕架构师的学习笔记:分布式+微服务+开源框架+性能优化《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!终极手撕架构师的学习笔记:分布式+微服务+开源框架+性能优化[外链图片转存中…(img-lywY2wpC-1711627058534)]《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

2401_83817122的博客 998

LabVIEW多界面应用开发:从启动器到主界面的切换架构与实现

在图形化编程领域,模块化与界面管理是构建复杂应用程序的核心。其原理在于通过清晰的程序架构,实现不同功能模块间的独立运行与协同工作,从而提升代码的可维护性和可扩展性。这种架构的技术价值在于能够有效管理应用程序的生命周期与资源,避免内存泄漏,并确保流畅的用户体验。在测控系统、自动化测试等工程实践中,常需实现如启动界面选择语言或模式后,无缝切换至主功能界面的场景。本文聚焦于LabVIEW环境,深入探讨如何利用动态调用、状态机等机制,并结合功能全局变量(FGV)与队列消息处理器(QMH)等热词技术,构建健壮的多界面

weixin_30802819的博客 263

ABP VNext + Elsa Workflow:构建企业级可视化审批系统

本文详细介绍了如何利用ABP VNext框架与Elsa Workflow可视化工作流引擎,高效构建灵活、可扩展的企业级审批系统。通过将ABP的稳健后台架构与Elsa的可视化流程设计能力相结合,开发人员能够快速搭建系统,而业务人员则能通过拖拽方式自主设计和调整审批流程,从而显著降低开发成本,提升业务响应速度。

weixin_29246195的博客 185

线上故障如何快速排查?来看这套技巧大全

简介:有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器、Java应用、数据库、Redis、网络和业务六个层面分享线上故障排查的思路和技巧。较长,同学们可收藏后再看。前言线上定位问题时,主要靠监控和日志。一旦超出监控的范围,则排查思路很重要,按照流程化的思路来定位问题,能够让我们在定位问题时从容、淡定,快速的定位到线上的问题。线上问题定位思维导图一 服务器层面1.1 磁盘1.1.1 问题现象当磁盘容量不足的时候,应用时常会抛出如下的异常信息:java.io.IOExceptio

阿里云开发者 9855

爬虫反爬:一文掌握 BotBrowser 的原理和使用(能绕过很多验证码的指纹浏览器)

BotBrowser是使用经过修改的Chromium内核(修改Chromium的C++源代码)的隐形浏览器,可靠地绕过Cloudflare、Shape、PerimeterX、Datadome、Akamai、Kasada、hCaptcha和reCAPTCHA。BotBrowser是一个跨平台的自动化工具,它重新定义了web自动化。专为爬虫、RPA(机器人流程自动化)和 Web 测试设计。与 Puppeteer/Selenium 不同,它通过无头模式(Headless)和API 级控制。

数据知道的博客 1万+

经典线上问题—JVM Full GC 的排查思路

Java 虚拟机在执行程序的过程中,会把所管理的内存划分成若干不同的。这些区域各有各有的用途,有的区域会随着虚拟机进程的启动而一直存在;有的区域会伴随着用户线程的启用和结束而创建和销毁。其次,JVM 内存区域也称为等其中,运行时数据区的。

zhangqin111的博客 1960

[SVA]SystemVerilog Assertion Property开发技巧总结

SystemVerilog Assertion开发技巧总结 一、在property中可以使用if-else条件语句 如下面的例子,根据misc_phy_12g_rx的取值,选择不同的判断语句 property ck1_en_rose_chk(); @(posedge clk) disable iff(~rst_n) ad_pn_ck1en & (current_state !== ST_IDLE) |->...

元直的博客 5924

1.FPGA开发软件安装——Vivado

目前主流的FPGA公司包括xilinx和Intel(原altera公司),其开发软件分别为vivado和quartusii。我们这里以目前国内应用较多的vivado为例进行安装讲解。 1、首先是去官网下载 Vivado 安装包:https://www.xilinx.com/support/download.html。下载这个最大的、支持所有的 OS 如 Windows/Linux 的安装包。 2、下载完之后,就进行解压。(最好在解压和安装之前都关闭所有的杀毒软件以防万一)。紧接着,解压完之后...

FPGA/MATLAB学习教程/源码/项目合作开发 8258

Java 应用线上问题排查思路、常用工具小结(1)

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》

2301_82242844的博客 1046

基于FPGA的多通道音频信号采样系统设计

FPGA是随着数字集成电路的发展而逐步演变而来的。从早期的电子管、晶体管、小规模集成电路,到超大规模集成电路(VLSIC),数字集成电路的集成度和性能不断提升。FPGA的出现为系统设计师提供了灵活的设计平台,使其能够在不依赖半导体厂商的情况下快速设计专用集成电路(ASIC)。FPGA具有设计周期短、成本低、开发工具先进等优点,广泛应用于原型设计和产品生产中。VHDL是一种用于描述数字系统的硬件描述语言,其语言形式类似于计算机高级语言,但包含了许多硬件特征语句。

qq_62634009的博客 709

线上问题排查的常用工具和方法

在长期排查线上问题的过程中,总结了一些工具的用法和排查问题的思路,这里跟大家分享一下,在遇到类似的问题时,希望能给予一些帮助。 首先讲讲工具,JVM自带的一些工具是必须熟练掌握的,例如jstack, jmap, jstat等,它们可以帮我们去深入了解JVM正在做的事情,主要的适用领域有这些: 1、jstack jstack可以告诉你当前所有JVM线程正在做什么...

独自成江湖 894

倒立摆的PLC控制(模型分析+ SCL源代码)

首先简单介绍下倒立摆模型,下面这幅图是MATLAB网站上的倒立摆模型,下面我们利用牛顿第二运动定律建立摆杆的运动方程。

RXXW_Dor的博客 3336

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: Docker常用配置管理操作札记整理
下一篇: JVM垃圾回收相关总结
zhg_vincent
博客等级 码龄12年 93粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值