VisualVM

干货分享丨jvm系列:dump文件深度分析

匆匆过客 提交于 2020-10-24 01:42:56
摘要: java内存dump是jvm运行时内存的一份快照,利用它可以分析是否存在内存浪费,可以检查内存管理是否合理,当发生OOM的时候,可以找出问题的原因。那么dump文件的内容是什么样的呢? JVM dump java内存dump是jvm运行时内存的一份快照,利用它可以分析是否存在内存浪费,可以检查内存管理是否合理,当发生OOM的时候,可以找出问题的原因。那么dump文件的内容是什么样的呢?我们一步一步来 获取JVM dump文件 获取dump文件的方式分为主动和被动 i.主动方式: 1.利用jmap,也是最常用的方式:jmap -dump:[live],format=b,file= 2.利用jcmd,jcmd GC.heap_dump 3.使用VisualVM,可以界面操作进行dump内存 4.通过JMX的方式 MBeanServer server = ManagementFactory.getPlatformMBeanServer(); HotSpotDiagnosticMXBean mxBean = ManagementFactory.newPlatformMXBeanProxy(server, " com.sun.management:type=HotSpotDiagnostic " , HotSpotDiagnosticMXBean. class ); mxBean

面试官:我就问了一个JVM性能调优,没想到他能吹半个小时

僤鯓⒐⒋嵵緔 提交于 2020-10-24 00:40:02
一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,由虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小。 年轻代(New):年轻代用来存放JVM刚分配的Java对象 年老代(Tenured):年轻代中经过垃圾回收没有回收掉的对象将被Copy到年老代 永久代(Perm):永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设置为128M就足够,设置原则是预留30%的空间。 New又分为几个部分: Eden:Eden用来存放JVM刚分配的对象 Survivor1 Survivro2:两个Survivor空间一样大,当Eden中的对象经过垃圾回收没有被回收掉时,会在两个Survivor之间来回Copy,当满足某个条件,比如Copy次数,就会被Copy到Tenured。显然,Survivor只是增加了对象在年轻代中的逗留时间,增加了被垃圾回收的可能性。 2.垃圾回收算法 垃圾回收算法可以分为三类,都基于标记-清除(复制)算法: Serial算法(单线程) 并行算法 并发算法

干货分享丨jvm系列:dump文件深度分析

▼魔方 西西 提交于 2020-10-23 02:24:21
摘要: java内存dump是jvm运行时内存的一份快照,利用它可以分析是否存在内存浪费,可以检查内存管理是否合理,当发生OOM的时候,可以找出问题的原因。那么dump文件的内容是什么样的呢? JVM dump java内存dump是jvm运行时内存的一份快照,利用它可以分析是否存在内存浪费,可以检查内存管理是否合理,当发生OOM的时候,可以找出问题的原因。那么dump文件的内容是什么样的呢?我们一步一步来 获取JVM dump文件 获取dump文件的方式分为主动和被动 i.主动方式: 1.利用jmap,也是最常用的方式:jmap -dump:[live],format=b,file= 2.利用jcmd,jcmd GC.heap_dump 3.使用VisualVM,可以界面操作进行dump内存 4.通过JMX的方式 MBeanServer server = ManagementFactory.getPlatformMBeanServer(); HotSpotDiagnosticMXBean mxBean = ManagementFactory.newPlatformMXBeanProxy(server, " com.sun.management:type=HotSpotDiagnostic " , HotSpotDiagnosticMXBean. class ); mxBean

JVM调优调的是什么?是寂寞吗?

别说谁变了你拦得住时间么 提交于 2020-10-22 06:01:45
不,是GC。 gc永远会是 Java 程序员需要考虑的不稳定因素之一。 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。 而GC的情景复杂又复杂,为了能更深刻的了解内存模型,参考《深入java虚拟机理解》,不定期更新JVM入门。 我自己遇到过一次内存泄漏,但不是线上环境,本地环境出现过一次,后来重新推包解决了,没有复现,那么平时的自用 服务器突然内存与磁盘IO暴增,你会如何调优?定位到具体线程后,是因为大对象占用空间造成,还是程序死循环了你如何解决?,关于JVM入门,以及JVM调优整理了地址请转至 https: //kkget .github.io/ 2020 /09/ 24 /JVM调优相关 https: //kkget .github.io/ 2020 / 10 / 13 /JVM从入门到放弃 以上内容不定期更新,今天主要从性能监控工具以及整理关于调优相关部分。 虚拟机性能监控工具 1.jps(JVM Porcess Status Tool) 功能:列出正在运行的虚拟机程序并显示执行主类名称以及进程ID( LVMID ,Local Virtiual Machine Identifier)。 jps -l 输出主类的全类名 jps -v 输出虚拟机启动时的JVM参数 格式 jps [ options ] [ hostid ] [root @zhaokk

看过很多的JVM文章,实战中却依然不知道如何进行分析排查?

五迷三道 提交于 2020-10-02 03:09:15
  今天面了个32岁的Java程序员,各方面都挺好,问啥都会,对于JVM调优问题,答得还行,最后问了个Go语言GC问题,就答不上来了,走时几乎落泪...唉!    细想想...   当面试官向你提问JVM的实战问题时,你是否感觉到无所适从?   想解决生产环境中的GC问题,你是否感觉到狗咬刺猬,无处下嘴?   面对JVM的海量参数,你是否感觉到迷茫无助?   看过很多的JVM文章,但当遇到了生产环境中真实问题的时候,你是否依然不知道如何进行分析排查?   如果是这样,我觉得我们大家先想清楚在 金九银十 这个时间段“ 自己想要什么 ”最为重要   我认为是 “ 实 战” !    “实战” 可以让我们 快速消除痛点,解决面试,积累实战经验 。   在这里小编推荐你,拿出2小时的时间   赶紧参加【 马士兵 老师】的 「JVM实战调优」 集训营   马老师带你横扫一切关于JVM的面试问题,吊打所有敢于提问JVM的面试官。   让你在简历中,填写上JVM调优经历,为升职加薪添上浓墨重彩的一笔。    往下看哦...       下面这些内容,全网首讲,你从未听过,且只讲一次   Go语言内存管理和Java的异同,Rust语言为什么不需要GC?   Golang的内存管理和Jvm有何不同?   Golang的gc算法和Jvm有何不同?   Golang的内存调优应该如何做?  

JVM的堆内存泄漏排查-性能测试

岁酱吖の 提交于 2020-08-18 08:53:09
JVM异常说明 https://testerhome.com/articles/24259 一文中已介绍了,JVM每个运行时区域——程序计数器 、Java虚拟机栈、本地方法栈、Java堆、方法区、直接内存发生OutOfMemoryError的不同原因和不同错误信息。 Java堆,是线程共享内存,几乎所有的对象实例以及数组都应在堆上分配。如下堆的内存泄漏错误也是我们常常遇到的 java.lang.OutOfMemoryError: Java heap space 工具VisualVM的介绍 使用VisualVM排查堆内存泄漏 查看GC 老年代Old和年轻代Eden区在不断增长,几乎已满。Full GC次数增多,内存没有有效释放。这是内存泄漏的明显迹象 查看系统日志 已有Full GC的日志,紧接着开始报错OutOfMemoryError 分析Heap Dump 导入Dump后,可以看到占用内存最大的类和实例——OOMMonitor类中的placeholder变量 示例代码 public class OOMMonitor { static class OOMobject { public byte[] placeholder = new byte[64 * 1024]; } public static void fillHeap(int num) throws

程序员使用IDEA这些插件后,办公效率提升100%(持续更新中)

旧巷老猫 提交于 2020-08-17 16:38:30
IDEA一些不错的插件分享 目录 IDEA一些不错的插件分享 插件集合 CamelCase Translation LiveEdit MarkDown Navigator Jrebel CheckStyle-IDEA Alibaba Java Coding Guidelines Ideavim Maven Helper FindBugs-IDEA GsonFormat Key promoter X .ignore JVM Debuger Memory View CMD Support Batch Scripts Support BashSupport Docker integration JMH plugin ANSI Highlighter Ideolog RestfulToolkit CodeGlance Lombok plugin activate-power-mode Background Image Plus Iedis Mongo Plugin VisualVM Launcher GenerateAllSetter MyBatisCodeHelperPro Easy Code IDEA Mind Map SequenceDiagram Material Theme UI String Manipulation JUnit Generator V2.0 设置方法 插件集合

fullGC 频繁导致CPU飙高

喜你入骨 提交于 2020-08-16 14:46:52
鄙人上班正在摸鱼中,突然后收到领导电话服务 报 503 好吧吓死了赶紧百度 http 503 :因暂时超载或临时维护,您的 Web 服务器目前无法处理 HTTP 请求。 其含义是, 这是一个暂时情况,会有一些延误, 过 后将会得到缓解。 有些服务器在这种情况下也许干脆拒绝套接字(socket) 连接,在这种情况下,可能会由于套接字建立超时而产生不同的错误信息。 说白了 服务压力或者别的原因 忙不过来了 我自己组装了一笔报文 用curl 脚本发送 发现 十多秒都没返回 开始下面排查 以下所有截图都不是 demo 而是真实样例 指令TOP top: 提供实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序 load average:系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 Cpu(s):显示CPU信息 75.9%us 用户空间占用CPU百分比 0.4%sy 内核和中断占用CPU百分比 0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比 23.7%id 空闲CPU百分比 0.0%wa 等待输入输出的CPU时间百分比 0.0%hi 硬中断(Hardware IRQ)占用CPU的百分比 0.0%si 软中断(Software Interrupts

《深入理解JVM.2nd》笔记(四):虚拟机性能监控与故障处理工具

孤街浪徒 提交于 2020-08-15 16:33:22
概述 给一个系统定位问题的时候, 知识、经验 是关键基础, 数据 是依据, 工具 是运用知识处理数据的手段。这里说的 数据 包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(headdump/hprof文件)等。 经常使用适当的虚拟机监控和分析工具可以加快分析数据、定位解决问题的速度,但在学习工具前,也应当意识到 工具永远都是知识技能的一层包装 。 JDK的命令行工具 这些工具比较小巧,只因这些命令行工具大多数是JDK/lib/tools.jar类库的一层薄包装而已 JDK开发团队选择采用Java代码来实现这些监控工具是有特别用意的 :当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程Telnet到服务器上都可能会受到限制。借助tools.jar类库里面的接口,我们可以直接在应用程序中实现功能强大的监控分析功能。 下表是Sun JDK监控和故障处理工具 名称 主要作用 jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程 jstat JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据 jinfo Configuration Info for Java,显示虚拟机配置信息 jmap Memory Map for

程序员都在用的 IDEA 插件(不断更新)

你离开我真会死。 提交于 2020-08-15 09:24:56
IDEA一些不错的插件分享 目录 IDEA一些不错的插件分享 插件集合 CamelCase Translation LiveEdit MarkDown Navigator Jrebel CheckStyle-IDEA Alibaba Java Coding Guidelines Ideavim Maven Helper FindBugs-IDEA GsonFormat Key promoter X .ignore JVM Debuger Memory View CMD Support Batch Scripts Support BashSupport Docker integration JMH plugin ANSI Highlighter Ideolog RestfulToolkit CodeGlance Lombok plugin activate-power-mode Background Image Plus Iedis Mongo Plugin VisualVM Launcher GenerateAllSetter MyBatisCodeHelperPro Easy Code IDEA Mind Map SequenceDiagram Material Theme UI String Manipulation JUnit Generator V2.0 设置方法 插件集合