JVM
文章平均质量分 57
chengqiuming
这个作者很懒,什么都没留下…
展开
-
GC 日志分析工具
一 点睛1 GCEasyGCEasy 是一款在线的 GC 日志分析器,可以通过 GC 日志分析进行内存泄露检测、GC 暂停原因分析、JVM 配置建议优化等功能,大多数功能是免费的。官网地址:Universal JVM GC analyzer - Java Garbage collection log analysis made easy2 GCViewerGCViewer 是一款离线的 GC 日志分析器,用于可视化 Java VM 选项 -verbose:gc 和 .NET 生成的数据原创 2021-09-10 17:58:53 · 3797 阅读 · 0 评论 -
Full GC 日志解析详解
一日志格式2021-09-06T08:44:49.453+0800: 4.396:[Full GC (MetadataGCThreshold) [PSYoungGen: 10082K->0K(89600K)] [ParOldGen: 32K->9638K(204800K)] 10114K->9638K(294400K), [Metaspace: 20158K->20156K(1067008K)], 0.0149928 secs] [Times: user=0.06 s...原创 2021-09-09 18:09:40 · 2972 阅读 · 0 评论 -
MinorGC 日志解析详解
一日志格式2021-09-06T08:44:49.453+0800: 4.396: [GC (Allocation Failure) [PSYoungGen: 76800K->8433K(89600K)] 76800K->8449K(294400K), 0.0060231 secs] [Times: user=0.02 sys=0.01, real=0.01 secs]二机制解析12021-09-06T08:44:49.453+0800:日志打印时间24.396...原创 2021-09-09 08:54:30 · 258 阅读 · 0 评论 -
GC 分类与日志剖析
一点睛针对 HotSpot VM 的实现,它里面的 GC 按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC)1 部分收集(Partial GC)不是完整收集整个 Java 堆的垃圾收集。其中又分为: 新生代收集(Minor GC / Young GC):只是新生代(Eden / S0, S1)的垃圾收集 老年代收集(Major GC / Old GC):只是老年代的垃圾收集。目前,只有 CMS GC 会有单独收集老年代的行为。.原创 2021-09-08 18:37:32 · 222 阅读 · 0 评论 -
通过 Java 代码获取 JVM 参数
一点睛Java 提供了 java.lang.management 包用于监视和管理 Java 虚拟机和 Java 运行时中的其他组件,它允许本地或远程监控和管理运行的 Java 虚拟机。其中 ManagementFactory 类较为常用,另外 Runtime 类可获取内存、CPU 核数等相关的数据。通过使用这些 api,可以监控应用服务器的堆内存使用情况,设置一些阈值进行报警等处理。二代码package chapter04;import java.lang.managemen..原创 2021-09-07 17:51:09 · 2149 阅读 · 0 评论 -
JVM 其他参数
一说明-XX:+DisableExplicitGC禁用 hotspot 执行 System.gc(),默认禁用-XX:ReservedCodeCacheSize=<n>[g|m|k]、-XX:InitialCodeCacheSize=<n>[g|m|k]指定代码缓存的大小-XX:+UseCodeCacheFlushing放弃一些被编译的代码,避免代码缓存被占满时 JVM 切换到 interpreted-only 的情况-XX:+DoEscapeAnal...原创 2021-09-07 08:49:31 · 112 阅读 · 0 评论 -
GC 日志相关选项
一常用选项-XX:+PrintGC <==> -verbose:gc打印简要日志信息,独立使用-XX:+PrintGCDetails打印详细日志信息,独立使用-XX:+PrintGCTimeStamps打印程序启动到GC发生的时间,搭配 -XX:+PrintGCDetails 使用,不可以独立使用-XX:+PrintGCDateStamps打印GC发生时的时间戳,搭配 -XX:+PrintGCDetails 使用,不可以独立使用-XX:...原创 2021-09-06 09:01:40 · 1625 阅读 · 0 评论 -
垃圾回收器选项设置
一垃圾回收器设置# Serial回收器-XX:+UseSerialGC 年轻代使用Serial GC, 老年代使用Serial Old GC# ParNew回收器-XX:+UseParNewGC 年轻代使用 ParNew GC,不影响老年代。-XX:ParallelGCThreads=N 设置年轻代并行收集器的线程数,默认开启和 CPU 数量相同的线程数。# Parallel回收器,JDK 8 默认的垃圾回收器-XX:+UseParallelGC 年轻代使用 Parallel Sca.原创 2021-09-05 16:16:54 · 1183 阅读 · 0 评论 -
查看默认垃圾回收器
一点睛首先需了解垃圾收集器之间的搭配使用关系- 红色虚线表示在 jdk8 时被 Deprecate,jdk9 时被删除- 绿色虚线表示在 jdk14 时被 Deprecate- 绿色虚框表示在 jdk9 时被 Deprecate,jdk14 时被删除二查看默认垃圾回收器1 -XX:+PrintCommandLineFlags:查看命令行相关参数(包含使用的垃圾收集器)2使用命令行指令:jinfo -flag相关垃圾回收器参数进程ID三实战1JDK8下,运...原创 2021-09-05 15:05:01 · 1114 阅读 · 0 评论 -
OOM 相关 VM参数
一点睛-XX:+HeapDumpOnOutOfMemoryError内存出现 OOM 时生成 Heap 转储文件,与下面这个参数互斥-XX:+HeapDumpBeforeFullGC 出现 FullGC 时生成 Heap 转储文件,与上面这个参数互斥-XX:HeapDumpPath=<path> 指定 heap 转储文件的存储路径,默认当前目录-XX:OnOutOfMemoryError=<path> 指定一个可行性程序或脚本的路径,当发生 OOM 时执行脚本.原创 2021-09-05 14:47:03 · 247 阅读 · 0 评论 -
堆、栈、方法区等内存大小设置
一点睛# 栈-Xss128k <==> -XX:ThreadStackSize=128k 设置每个线程栈的大小为128K# 堆-Xms2048m <==> -XX:InitialHeapSize=2048m 设置 JVM 初始堆内存为2048M-Xmx2048m <==> -XX:MaxHeapSize=2048m 设置 JVM 最大堆内存为2048M-Xmn2g <==> -XX:NewSize=2g -XX:MaxNewSi.原创 2021-09-05 14:15:17 · 1591 阅读 · 0 评论 -
JVM 中打印设置的 XX 选项及值
一点睛下面是常用打印设置方法,另外还可以配合jinfo使用。-XX:+PrintCommandLineFlags 可以让在程序运行前打印出用户手动设置或 JVM 自动设置的 XX 选项-XX:+PrintFlagsInitial 打印所有 XX 选项的默认值-XX:+PrintFlagsFinal 打印所有 XX 选项在运行时生效的值-XX:+PrintVMOptions 打印 JVM 的参数二 实战E:\JVMDemo3>jps7300 Remot...原创 2021-09-05 11:05:05 · 247 阅读 · 0 评论 -
添加 JVM 参数选项
一IDEEclipse 和IDEA中配置简单,在 Run Configurations 中 VM Options 中配置即可,大同小异。二 运行 jar 包java -Xms100m -Xmx100m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar demo.jar三 Tomcat 运行 war 包# Linux 下tomcat/bin/catalina.sh 添加JAVA_OPTS="-Xms512M -Xmx102...原创 2021-09-05 10:39:40 · 2751 阅读 · 0 评论 -
JVM -XX 参数选项
一特点 非标准化参数 使用的最多的参数类型 这类选项属于实验性,不稳定 以 -XX开头 二作用用于开发和调试JVM三分类1 Boolean 类型格式 -XX:+<option>启用 option 属性 -XX:-<option>禁用 option 属性 2 非 Boolean 类型格式 -XX:<option>=<number>设置 option 数值,可...原创 2021-09-05 10:05:08 · 183 阅读 · 0 评论 -
JVM -X 参数选项
一点睛1特点非标准化参数 功能还是比较稳定的。但官方说后续版本可能会变更 以 -X开头二 选项说明C:\Users\chengqiuming>java -X-Xmixed混合模式执行 (默认)-Xint仅解释模式执行-Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>设置搜索路径以引导类和资源...原创 2021-09-05 09:40:45 · 280 阅读 · 0 评论 -
JVM 标准参数选项
一JVM参数选项1参数选项类型2 官网https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html3标准参数选项说明二标准参数选项C:\Users\chengqiuming>java -help用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [arg...原创 2021-09-05 09:20:46 · 181 阅读 · 0 评论 -
JVM 监控的其他工具
一 Flame Graphs(火焰图)在追求极致性能的场景下,了解你的程序运行过程中 CPU 在干什么很重要,火焰图就是一种非常直观的展示 CPU 在程序整个生命周期过程中时间分配的工具。火焰图对于现代的程序员不应该陌生,这个工具可以非常直观的显示出调用找中的 CPU 消耗瓶颈。网上的关于 Java 火焰图的讲解大部分来自于 Brenden Gregg 的博客 http://new.brendangregg.com/flamegraphs.html火焰图,简单通过 x 轴横条宽度来度量时间指标,原创 2021-09-05 09:01:32 · 160 阅读 · 1 评论 -
Java Flight Recorder——飞行记录仪
一点睛Java Flight Recorder 是 JMC 的其中一个组件,能够以极低的性能开销收集 Java 虚拟机的性能数据。与其他工具相比,JFR 的性能开销很小,在默认配置下平均低于 1%。JFR 能够直接访问虚拟机内的敌据并且不会影响虚拟机的优化。因此它非常适用于生产环境下满负荷运行的 Java 程序。Java Flight Recorder 和 JDK Mission Control 共同创建了一个完整的工具链。JDK Mission Control 可对 Java Flight Re.原创 2021-09-04 15:49:27 · 4281 阅读 · 0 评论 -
Java Misssion Control——实时 JVM 监控
一工具位置二历史在 Oracle 收购 Sun 之前,Oracle 的 JRockit 虚拟机提供了一款叫做 JRockit Mission Control 的虚拟机诊断工具。在 Oracle 收购Sun 之后,Oracle 公司同时拥有了 Hotspot 和 JRockit 两款虚拟机。根据 Oracle 对于 Java 的战略,在今后的发展中,会将 JRokit 的优秀特性移植到 Hotspot 上。其中一个重要的改进就是在 Sun 的 JDK 中加入了 JRockit 的支持。...原创 2021-09-04 15:17:43 · 988 阅读 · 0 评论 -
Arthas 生成火焰图
一点睛profiler:用于生成火焰图二 代码package chapter03;import java.util.ArrayList;import java.util.Random;/*** -Xms600m -Xmx600m -XX:SurvivorRatio=8* 老年代:400m* 伊甸园:160m* s0:20m* s1:20m*/public class OOMTest { public static void main(String[] ar.原创 2021-09-04 14:50:12 · 3987 阅读 · 0 评论 -
Arthas 关于方法调用命令实战
一点睛1 monitor 方法执行监控,调用次数、执行时间、失败率-c 统计周期,默认值为120秒2 watch 方法执行观测,能观察到的范围为:返回值、抛出异常、入参,通过编写 groovy 表达式进行对应变量的查看-b 在方法调用之前观察(默认关闭)-e 在方法异常之后观察(默认关闭)-s 在方法返回之后观察(默认关闭)-f 在方法结束之后(正常返回和异常返回)观察(默认开启)-x 指定输岀结果的属性遍历深度,默认为03 trace 方法内部调用路径,并输出方法路.原创 2021-09-04 14:24:59 · 4457 阅读 · 0 评论 -
Arthas 的 jad 命令 mc 命令 classloader 命令实战
一点睛jad:反编译,将字节码反编译成java源码mc:内存编译器,编译java文件为字节码redefine:加载外部的字节码文件,替换 jvm已加载的类,推荐使用retransform命令替换redefineclassloader:将 JVM 中所有的classloader的信息统计出来,并可以展示继承树,urls等。二代码package chapter03;import java.util.ArrayList;import java.util.c...原创 2021-09-04 10:54:47 · 2102 阅读 · 0 评论 -
Arthas 的 sc 命令和 sm 命令实战
一点睛sc:查看JVM已加载的类信息。https://arthas.aliyun.com/doc/sc.htmlsm:查看已加载类的方法新。https://arthas.aliyun.com/doc/sm.html二代码package chapter03;import java.util.ArrayList;import java.util.concurrent.TimeUnit;public class JProfilerTest { ...原创 2021-09-04 10:13:40 · 2970 阅读 · 0 评论 -
Arthas 的 sysprop 命令和 heapdump 命令实战
一点睛sysprop:查看和修改 JVM 的系统属性sysenv:查看系统环境变量heapdump:dump java heap,类似 jmap 命令的 heap dump 功能二代码package chapter03;import java.util.ArrayList;import java.util.concurrent.TimeUnit;public class JProfilerTest { public static void main(Strin..原创 2021-09-04 09:51:55 · 1830 阅读 · 0 评论 -
Arthas 的 dashboard 命令和 thread 命令实战
一点睛dashboard 当前系统的实时数据面板thread 查看当前 JVM 的线程堆栈信息二代码package chapter03;import java.util.ArrayList;import java.util.concurrent.TimeUnit;public class JProfilerTest { public static void main(String[] args) { while (true){ ..原创 2021-09-04 09:41:08 · 3509 阅读 · 0 评论 -
Arthas 基础命令实战
一点睛quit/exit 退出当前 Arthas客户端,其他 Arthas喜户端不受影响stop/shutdown 关闭 Arthas服务端,所有 Arthas客户端全部退出help 查看命令帮助信息cat 打印文件内容,和l inux 里的 cat 命令类似echo 打印参数,和 linux 里的 echo 命令类似grep 匹配查找,和 linux 里的 grep 命令类似tee 复制标隹输入到标准输出和指定的文件,和 linux 里的 tee 命令类似pwd 返回当.原创 2021-09-04 09:09:59 · 541 阅读 · 0 评论 -
Arthas 介绍
一 点睛一般的 JVM 监控工具都必须在服务端项目进程中配置相关的监控参数,然后工具通过远程连接到项目进程,获取相关的数据。这样就会带来一些不便,比如线上环境的网络是隔离的,本地的监控工具根本连不上线上环境。并且类似于 Jprofiler 这样的商业工具,是需要付费的。那么有没有一款工具不需要远程连接,也不需要配置监控参数,同时也提供了丰富的性能监控数据呢?阿里巴巴开源的性能分析神器 Arthas 应运而生。Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。在原创 2021-09-03 18:29:47 · 808 阅读 · 0 评论 -
Jprofile 的监控内存泄漏程序实例
一代码package chapter03;import java.util.ArrayList;import java.util.concurrent.TimeUnit;public class MemoryLeak1 { public static void main(String[] args) { while (true) { ArrayList list = new ArrayList(); for (int.原创 2021-09-03 17:39:25 · 189 阅读 · 0 评论 -
Jprofile 的监控一个正常程序
一代码package chapter03;import java.util.ArrayList;import java.util.concurrent.TimeUnit;public class JProfilerTest { public static void main(String[] args) { while (true){ ArrayList list = new ArrayList(); for (int.原创 2021-09-02 18:35:34 · 162 阅读 · 0 评论 -
Jprofile 的 Thread History 功能
一点睛线程分析主要关心三个方面:1web容器的线程最大数。比如:Tomcat的线程容量应该略大于最大并发数。2线程阻塞3线程死锁二 使用Jprofile内置的 JDBCdemo 进行说明1ThreadHistory2线程dump显示结果如下三 线程死锁1代码package chaper02;/*** @className: ThreadDeadLock* @description: 线程死锁* @date:...原创 2021-09-02 09:03:20 · 178 阅读 · 0 评论 -
Jprofile 的 CPU 视图功能
一使用JDBCdemo 进行说明二 启动并分析 CallTree三 分析热点代码1以类为维度进行分析2以方法为维度进行分析3以包为维度进行分析原创 2021-09-01 18:33:02 · 260 阅读 · 0 评论 -
Jprofile 的 heap Walker功能
一代码package chapter03;import java.util.ArrayList;import java.util.Random;/*** -Xms600m -Xmx600m -XX:SurvivorRatio=8* 老年代:400m* 伊甸园:160m* s0:20m* s1:20m*/public class OOMTest { public static void main(String[] args) { ArrayList<.原创 2021-09-01 17:58:17 · 431 阅读 · 0 评论 -
Jprofile 的内存视图分析
一点睛LIvememory内存剖析:class/class instance的相关信息。例如:对象的个数,大小,对象创建的方法执行栈,对象创建的热点。内存中对象,我们需要关注的三种情况。1频繁创建的Java 对象:死循环、循环次数过多。2存在大对象:读取文件时,byte[]应该边读边写,如果长时间不写的话,导致byte[]过多。3存在内存泄漏二 代码package chapter03;import java.util.ArrayList;impor...原创 2021-08-31 18:52:59 · 293 阅读 · 0 评论 -
Jprofile 的遥控监测功能
一代码package chapter03;import java.util.ArrayList;import java.util.Random;/*** -Xms600m -Xmx600m -XX:SurvivorRatio=8* 老年代:400m* 伊甸园:160m* s0:20m* s1:20m*/public class OOMTest { public static void main(String[] args) { ArrayList<.原创 2021-08-31 17:46:28 · 124 阅读 · 0 评论 -
Jprofile 启动选项说明
一 Jprofile启动后的界面 二启动选项说明1第一项说明当选择这一项出现如下界面,表示打开系统已有的demo或已保存过的session2 第二项说明当选择这一项出现如下界面,表示去连接一个正在运行的程序3 第三项说明当选择这一项出现如下界面,表示去连接一个本地或远程的服务器4 第四项说明当选择这一项出现如下界面,表示离线打开一个快照...原创 2021-08-30 18:41:38 · 210 阅读 · 0 评论 -
JProfiler 基本介绍
一 点睛在运行 Java 的时候有时候想测试运行时占用内存情况,这时候就需要使用测试工具查看了。在 eclipse 里面有 Eclipse Memory Analyzer tool(MAT)插件可以测试,而在 IDEA 中也有这么一个插件,就是 JProfiler。JProfiler 是由 ej-technologies 公司开发的一款 Java 应用性能诊断工具。功能强大,但是收费。二 特点 使用方便、界面操作友好(简单且强大) 对被分析的应用影响小(提供模板) CPU,原创 2021-08-30 17:53:23 · 8137 阅读 · 0 评论 -
OQL 语言以及在MAT中使用
一点睛MAT支持一种类似于 SQL 的查询语言OQL(ObjectQueryLanguage)。OQL 使用类 SQL语法,可以在堆中进行对象的查找和筛选。它包含下面4种基本语法结构。 SELECT子句 FROM子句 WHERE子句 内置对象和方法 二 在MAT中OQL 位置三语法1SELECT子句2FROM子句3WHERE子句4内置对象和方法四实战1 select * fr...原创 2021-08-30 17:51:55 · 2762 阅读 · 0 评论 -
内存泄漏分析实战
一代码package chapter03;import java.util.Arrays;import java.util.EmptyStackException;public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { .原创 2021-08-29 16:45:59 · 203 阅读 · 0 评论 -
内存泄漏的8种情况
一 静态集合类静态集合类,如 HashMap、LinkedList等等。如果这些容器为静态的,那么它们的生命周期与JVM程序一致,则容器中的对象在程序结束之前不能被释放,从而造成内存泄漏。简单而言,长生命周期对象持有短生命周期对象的引用,尽管短生命周期的对象不再使用,但是因为长生命周期对象持有它的引用而导致不能被回收。package chapter03;import java.util.ArrayList;import java.util.List;public class Mem...原创 2021-08-29 16:33:24 · 10105 阅读 · 0 评论 -
内存泄漏的理解为分类
一什么是内存泄漏可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一个对象是否被引用。那么对于这种情况下,由于代码的实现不同就会出现多种内存泄漏问题(让JVM误以为此对象还在引用中,无法回收,造成内存泄漏)内存泄漏理解见下表。 是否还被使用? 是 是 是否还被需要? 是 否 是内存泄漏吗? 不是内存泄漏 ...原创 2021-08-29 15:04:25 · 276 阅读 · 0 评论