摘要:VisualVM在Java 8中是JDK自带的一个图形化工具,项目主页 "VisualVM" ,在后续版本中可能会从JDK移除。 VisualVM可以监控Java进程的CPU与内存占用情况,可以监控Java进程内的各个线程的执行情况,还可以与MAT工具一样用来分析堆转储快照。 监控远程Tomcat进 阅读全文
posted @ 2020-02-13 20:11 Cellei 阅读 (12) 评论 (0) 编辑
摘要:线上系统突然变得卡顿或无法访问,排除网络异常的情况下,检查服务器资源占用情况,如果CPU、内存、磁盘IO等资源占用过高,就会导致无法继续处理HTTP请求。 如果是CPU占用飙高,有可能是程序中存在死循环、死锁导致的,也有可能是内存紧张从而频繁GC导致的,要具体问题具体分析。 排查过程 这里记录一次线 阅读全文
posted @ 2020-02-06 10:07 Cellei 阅读 (4) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 jstack命令可以打印Java进程的各个线程堆栈跟踪信息,可以用来查看Java中各个线程的执行情况,可以用来定位和解决死循环和死锁导致的CPU飙高的问题。 所有的JDK工具都可以在Oracle官网 阅读全文
posted @ 2020-02-02 09:19 Cellei 阅读 (22) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 MAT是分析Java堆内存的一个工具,全称是 The Eclipse Memory Analyzer Tool,用来帮助分析内存泄漏和减少内存消耗。使用MAT分析Java堆快照,可以快速计算出对象的 阅读全文
posted @ 2020-01-29 14:28 Cellei 阅读 (17) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 jmap 命令用来生成内存堆转储快照,一般称为heapdump或dump文件。 除了使用 jmap 命令,还以通过一些JVM参数让虚拟机在内存溢出时自动dump出快照文件。 | 参数 | 说明 | 阅读全文
posted @ 2020-01-11 09:53 Cellei 阅读 (23) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 jstat命令用来查看JVM统计信息,可以查看类加载信息、垃圾收集的信息、JIT编译信息等等,功能非常丰富。 所有的JDK工具都可以在Oracle官网的 "Java Tools Reference" 阅读全文
posted @ 2020-01-09 23:03 Cellei 阅读 (30) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 如何查看JVM运行时参数,对于线上JVM调优是很关键的,因为只有知道了当前使用的JVM参数是什么值,才能知道如何进行调优。 以下JVM参数,可以用来打印JVM运行时参数及它们的值: | 参数 | 说 阅读全文
posted @ 2020-01-08 08:18 Cellei 阅读 (42) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 JVM的参数类型,大致可以分为标准参数、X参数、XX参数,而XX参数又可以分为Boolean类型、非Boolean类型。 标准参数 标准参数就是各个JVM的版本中不变的,相对稳定的参数。 例如: < 阅读全文
posted @ 2020-01-06 22:57 Cellei 阅读 (45) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 内存分配一般关注的是对象在堆上分配的情况,对象主要分配在新生代的Eden区中,如果启用了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也会直接分配在老年代中,这取决于使用的垃圾收集器组合 阅读全文
posted @ 2020-01-05 21:17 Cellei 阅读 (99) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 收集GC日志 不同的垃圾收集器,输出的日志格式各不相同,但也有一些相同的特征。熟悉各个常用垃圾收集器的GC日志,是进行JVM调优的必备一步。 解析GC日志,首先需要收集日志,常用的有以下JVM参数用 阅读全文
posted @ 2020-01-05 07:55 Cellei 阅读 (138) 评论 (1) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 垃圾收集器 垃圾收集算法是是内存回收的方法论,垃圾收集器是内存回收的具体实现。不同的虚拟机会有不同的垃圾收集器的实现,我们主要讨论的是默认的HotSpot虚拟机,这个虚拟机包含的垃圾收集器如下图; 阅读全文
posted @ 2020-01-04 09:46 Cellei 阅读 (208) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 垃圾收集算法 垃圾收集算法主要有标记 清除算法、复制算法、标记 整理算法、分代收集算法这几种,对算法的具体实现不做过多探究,只对他们的设计思想进行介绍。 标记 清除算法 最基础的算法就是 标记 清除 阅读全文
posted @ 2020-01-02 06:21 Cellei 阅读 (76) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 Java虚拟机的内存区域中,程序计数器、Java栈和本地方法栈是线程私有的,随线程而生随线程而灭,因此这几个区域的内存回收和分配都有确定性,所以主要探究的是Java堆和方法区的内存分配及回收。 Ja 阅读全文
posted @ 2020-01-01 20:29 Cellei 阅读 (55) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 在 Java 虚拟机内存区域中,除了程序计数器外,其他几个内存区域都可能会发生OutOfMemoryError,这次通过一些代码来验证虚拟机各个内存区域存储的内容。 在实际工作中遇到内存溢出异常时, 阅读全文
posted @ 2019-12-30 22:15 Cellei 阅读 (66) 评论 (0) 编辑
摘要:本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 对象的创建 1. 虚拟机遇到一条 new 指令时,首先去检查这个指令的参数是否能在方法区常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,就必须先执行 阅读全文
posted @ 2019-12-29 11:18 Cellei 阅读 (53) 评论 (0) 编辑