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