【JVM故障問題排查心得】「記憶體診斷系列」JVM記憶體與Kubernetes中pod的記憶體、容器的記憶體不一致所引發的OOMKilled問題總結(上)

  • 2022 年 11 月 30 日
  • 筆記

背景介绍 在我们日常的工作当中,通常应用都会采用Kubernetes进行容器化部署,但是总是会出现一些问题,例如,JVM堆小于Docker容器中设置的内存大小和Kubernetes的内存大小,但是还是会被OOMKilled。在此我们介绍一下K8s的OOMKilled的Exit Code编码。 Exi …

Continue Reading

Class文件解析

  • 2022 年 11 月 29 日
  • 筆記

1 准备工作 获取class文件byte[] public static byte[] getFileBytes(File file) { try (FileInputStream fileInputStream = new FileInputStream(file)) { int availabl …

Continue Reading

並發bug之源(二)-有序性

  • 2022 年 11 月 17 日
  • 筆記

什么是有序性? 简单来说,假设你写了下面的程序: int a = 1; int b = 2; System.out.println(a); System.out.println(b); 但经过编译器/CPU优化(指令重排序,和编程语言无关)后可能就变成了这样: int b = 2; int a = …

Continue Reading

jvm調優思路及調優案例

  • 2022 年 11 月 13 日
  • 筆記

jvm调优思路及调优案例 ​ 我们说jvm调优,其实就是不断测试调整jvm的运行参数,尽可能让对象都在新生代 (Eden) 里分配和回收,尽量别让太多对象频繁进入老年代,避免频繁对老年代进行垃圾回收,同时给系统充足的内存大小,避免新生代频繁的进行垃圾回收。从而减少STW( stop the worl …

Continue Reading

定位java程式中佔用cpu最高的執行緒堆棧資訊

  • 2022 年 11 月 11 日
  • 筆記

找出占用cpu最高的线程堆栈信息 在java编码中,有时会因为粗心导致cpu占用较高的情况,为了避免影响程序的正常运行,需要找到问题并解决。这里模拟一个cpu占用较高的场景,并尝试定位到代码行。 示例代码如下: public class Math { public static final int …

Continue Reading

JVM調優工具使用手冊

  • 2022 年 11 月 10 日
  • 筆記

​ 作为Java开发人员,我们肯定知道JDK的bin目录下有"java.exe"、"javac.exe"这两个命令工具,这也是我们平时用得最多的工具。但其实bin目录下还有很多工具,这些工具可以帮助我们进行JVM的调优,帮我们定位找出应用程序运行中产生的问题。下面我们来看看其中一些调优工具。 前置启 …

Continue Reading

JVM運行時數據區域詳解

  • 2022 年 11 月 9 日
  • 筆記

参考文章: 《Java Se11 虚拟机规范》 《深入理解Java虚拟机-JVM高级特性与最佳实践 第3版》- 周志明 本文基于Java Se 11讲解。 根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 对于不同的虚拟机实现,在运行时数据区的实现上并不完 …

Continue Reading

jvm雙親委派機制詳解

  • 2022 年 11 月 7 日
  • 筆記

双亲委派机制 ​ 记录一下JVM的双亲委派机制学习记录。 类加载器种类 ​ 当我们运行某一个java类的main方法时,首先需要由java虚拟机的类加载器将我们要执行的main方法所在的class文件加载到jvm中,这里提到的类加载器大概有4种: 引导类加载器: 负责加载支撑JVM运行的位于JRE的 …

Continue Reading

萬字詳解JVM,讓你一文吃透

  • 2022 年 11 月 7 日
  • 筆記

摘要: 本文将带大家详细地了解关于JVM的一些知识点。 本文分享自华为云社区《 【JVM】关于JVM,你需要掌握这些 | 一文彻底吃透JVM系列 》,作者: 冰 河 。 JDK 是什么? JDK 是用于支持 Java 程序开发的最小环境。 Java 程序设计语言 Java 虚拟机 Java API类 …

Continue Reading