随笔分类 -  【技术专区-JVM】

摘要:@[TOC](全方面带你透彻探索服务优化技术方案(服务器系统性能调优)) # 调优意义 系统运行缓慢,执行速度较差虽然没有对用户或公司造成实质性的损失,但它从侧面反映出系统在某些方面存在问题。可能需要对系统参数进行优化,或者对系统的设计和交互进行调整,这是后续系统性能优化的一个重要过程。我们将继续努 阅读全文
posted @ 2023-07-01 21:43 洛神灬殇 阅读(260) 评论(0) 推荐(0) 编辑
摘要:XPocket 用户文档 XPocket 是PerfMa为终结性能问题而生的开源的插件容器,它是性能领域的乐高,将定位或者解决各种性能问题的常见的Linux命令,JDK工具,知名性能工具等适配成各种XPocket插件,并让它们可以相互联动一键解决特定的性能问题。 目前XPocket插件生态已经实现了 阅读全文
posted @ 2023-03-30 13:30 洛神灬殇 阅读(172) 评论(0) 推荐(0) 编辑
摘要:并发编程的难题和挑战 在并发编程的技术领域中,对于我们而言的难题主要有两个: 多线程之间如何进行通信和线程之间如何同步,通信是指线程之间以何种机制来交换信息。 多线程的线程通信机制 在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 共享内存的方式,多线程之间共享公共的状态(变量),那么 阅读全文
posted @ 2023-03-26 18:50 洛神灬殇 阅读(131) 评论(0) 推荐(0) 编辑
摘要:前提介绍 很多小伙伴,都跟我反馈,说自己总是对JVM这一块的学习和认识不够扎实也不够成熟,因为JVM的一些特性以及运作机制总是混淆以及不确定,导致面试和工作实战中出现了很多的纰漏和短板,解决广大小伙伴痛点,我写了本篇文章,希望可以帮助大家夯实基础和锻造JVM技术功底。 什么是垃圾收集(GC) 在JV 阅读全文
posted @ 2023-01-23 16:45 洛神灬殇 阅读(281) 评论(0) 推荐(0) 编辑
摘要:专题⽬标 本系列专题的目标是希望可以帮助读者们系统和全访问掌握应⽤系统调优的思路与方案以及相关的调优工具的使用,虽然未必会覆盖目前的所有的问题场景,但是还是提供了较为丰富的案例和调优理论,会帮助大家打开思维去⽀撑系统服务体系优化能力。 适合人员 Java相关的开发人员、系统架构师、数据库DB人员以及 阅读全文
posted @ 2023-01-21 00:04 洛神灬殇 阅读(171) 评论(0) 推荐(0) 编辑
摘要:为什么我设置的大小关系没有错,还会OOMKilled? 这种问题常发生在JDK8u131或者JDK9版本之后所出现在容器中运行JVM的问题:在大多数情况下,JVM将一般默认会采用宿主机Node节点的内存为Native VM空间(其中包含了堆空间、直接内存空间以及栈空间),而并非是是容器的空间为标准。 阅读全文
posted @ 2023-01-01 13:36 洛神灬殇 阅读(460) 评论(0) 推荐(0) 编辑
摘要:深度剖析  | 【JVM深层系列】[HotSpotVM研究系列] JVM调优的"标准参数"的各种陷阱和坑点分析(攻克盲点及混淆点)「 1 」相信大多数人的理解是Major GC只针对老年代,Full GC会先触发一次Minor GC,不知对否?我参考了R大的分析和介绍,总结了一下相关的说明和分析结论。 阅读全文
posted @ 2022-12-16 10:23 洛神灬殇 阅读(256) 评论(0) 推荐(1) 编辑
摘要:【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?我有一个在主机中运行的Docker容器(也有在同一主机中运行的其他容器)。该Docker容器中的应用程序将会计算数据和流式处理,这可能会消耗大量内存。 该容器会不时退出。我怀疑这是由于内存不足,但不是很确定。我需要找到根本原因的方法。那么有什么方法可以知道这个集装箱的死亡发生了什么? 阅读全文
posted @ 2022-12-15 13:06 洛神灬殇 阅读(627) 评论(0) 推荐(0) 编辑
摘要:【Java难点攻克】「NIO和内存映射性能提升系列」彻底透析NIO底层的内存映射机制原理与Direct Memory的关系Java类库中的NIO包相对于IO包来说有一个新功能就是 【内存映射文件】,在业务层面的日常开发过程中并不是经常会使用,但是一旦在处理大文件时是比较理想的提高效率的手段,之前已经在基于API和开发实战角度介绍了相关的大文件读取以及NIO操作的实现,而本文主要想结合操作系统(OS)底层中相关方面的内容进行分析原理,夯实大家对IO模型及操作系统相关的底层知识体系。 阅读全文
posted @ 2022-12-11 11:09 洛神灬殇 阅读(388) 评论(0) 推荐(0) 编辑
摘要:之前文章根据《【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(上)》我们知道了如何进行设置和控制对应的堆内存和容器内存的之间的关系,所以防止JVM的堆内存超过了容器内存,导致容器出现OOMKilled的情况。但是在整个JVM进程体系而言,不仅仅只包含了Heap堆内存,其实还有其他相关的内存存储空间是需要我们考虑的,一边防止这些内存空间会造成我们的容器内存溢出的场景,正如下图所示。 阅读全文
posted @ 2022-12-01 12:32 洛神灬殇 阅读(518) 评论(0) 推荐(0) 编辑
摘要:【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(上)在我们日常的工作当中,通常应用都会采用Kubernetes进行容器化部署,但是总是会出现一些问题,例如,JVM堆小于Docker容器中设置的内存大小和Kubernetes的内存大小,但是还是会被OOMKilled。在此我们介绍一下K8s的OOMKilled的Exit Code编码。 阅读全文
posted @ 2022-11-29 22:38 洛神灬殇 阅读(1065) 评论(0) 推荐(1) 编辑
摘要:SafePoint前提介绍 在高度优化的现代JVM里,Safepoint有几种不同的用法。GC safepoint是最常见、大家听说得最多的,但还有deoptimization safepoint也很重要。 在HotSpot VM里,这两种Safepoint目前实现在一起,但其实概念上它们俩没有直接 阅读全文
posted @ 2021-10-20 22:49 洛神灬殇 阅读(692) 评论(0) 推荐(1) 编辑
摘要:承接上文 (完结撒花1-52系列)☕【JVM技术指南】「JVM总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"【上部】 并行收集器 并行收集器(也称为吞吐量收集器)是类似于串行收集器的分代收集器。 串行和并行收集器之间的主要区别是,并行收集器有多个线程,用于加速垃圾回收。 通过命令行选项 阅读全文
posted @ 2021-09-14 21:15 洛神灬殇 阅读(276) 评论(0) 推荐(0) 编辑
摘要:优化目标与策略(Ergonomics) 垃圾回收器、堆和运行时编译器默认选择 G1(Garbage First)收集器 GC线程的最大值受限于堆大小和可用的CPU资源 初始堆空间(Xms)为物理内存的1/64 最大堆空间(Xmx)为物理内存的1/4 分层编译器,同时使用C1和C2 可以将 Java 阅读全文
posted @ 2021-09-13 21:27 洛神灬殇 阅读(120) 评论(0) 推荐(0) 编辑
摘要:JVM内存分配及申请过程 当使用new关键字或者其他任何方式进行创建一个类的对象时,JVM虚拟机需要为该对象分配内存空间,而对象的大小在类加载完成后已经确定了,所以分配内存只需要在Java堆中划分出一块大小相等的内存,JVM虚拟机中有指针碰撞和空闲列表两种方式分配内存。 指针碰撞方式 如果Java堆 阅读全文
posted @ 2021-09-01 14:14 洛神灬殇 阅读(520) 评论(0) 推荐(0) 编辑
摘要:GraalVM介绍 今天我们来讲讲整个Java生态下相当有分量的一位角儿——GraalVM:GraalVM官方网站,Quarku官方文档 GraalVM是用Java实现的基于HotSpot/OpenJDK的JVM和JDK。它支持额外的编程语言和运行范式,例如对Java应用程序AOT,从而实现快速启动 阅读全文
posted @ 2021-08-24 12:43 洛神灬殇 阅读(676) 评论(0) 推荐(0) 编辑
摘要:前提概要 Java的class字节码并不是机器语言,要想让机器能够执行,还需要把字节码翻译成机器指令。这个过程是Java虚拟机做的,这个过程也叫编译。是更深层次的编译。 在编译原理中,把源代码翻译成机器指令,一般要经过以下几个重要步骤: 根据完成任务不同,可以将编译器的组成部分划分为前端(Front 阅读全文
posted @ 2021-08-24 12:41 洛神灬殇 阅读(105) 评论(0) 推荐(0) 编辑
摘要:1.调优的目的 1.控制GC的行为:GC是一个后台处理,但是它也是会消耗系统性能的,因此经常会根据系统运行的程序的特性来更改GC行为。 2.控制JVM堆栈大小:JVM在内存分配上不需要你修改,但是当你的程序新生代对象在某个时间段产生的比较多的时候,就需要控制新生代的堆大小,同时,还要需要控制总的JV 阅读全文
posted @ 2020-05-27 15:11 洛神灬殇 阅读(414) 评论(0) 推荐(0) 编辑
摘要:多线程Java网络应用threadJVM 一:jstack jstack命令的语法格式: jstack <pid>。可以用jps查看java进程id。这里要注意的是: 1. 不同的 JAVA虚机的线程 DUMP的创建方法和文件格式是不一样的,不同的 JVM版本, dump信息也有差别。本文中,只以 阅读全文
posted @ 2020-05-11 11:44 洛神灬殇 阅读(311) 评论(0) 推荐(0) 编辑
摘要:有应用报出这样的异常“java.lang.OutOfMemoryError: unable to create new native thread”。甚至机器上执行shell命令也会报”-bash: fork: Resource temporarily unavailable”异常。机器上的其他应用 阅读全文
posted @ 2020-04-20 19:44 洛神灬殇 阅读(758) 评论(0) 推荐(0) 编辑