在金融级应用场景中,JVM 深度调优对于保障系统的高性能、低延迟和高稳定性至关重要。以下是一些实战经验和技巧: 1. 调优前的全面评估与监控 明确业务需求与性能指标 了解金融业务的高峰低谷时段、交易量预期、响应时间要求等。例如,证券交易系统在开盘和收盘时段交易量大,要求系统响应时间在毫秒级;而银行的批量账务处理可能更注 […]
在金融级应用场景中,JVM 深度调优对于保障系统的高性能、低延迟和高稳定性至关重要。以下是一些实战经验和技巧: 1. 调优前的全面评估与监控 明确业务需求与性能指标 了解金融业务的高峰低谷时段、交易量预期、响应时间要求等。例如,证券交易系统在开盘和收盘时段交易量大,要求系统响应时间在毫秒级;而银行的批量账务处理可能更注 […]
-XX:InitialRAMPercentage 和 -XX:MaxRAMPercentage 是 Java 虚拟机(JVM)的两个参数,用于基于系统可用物理内存的百分比来动态设置堆内存的初始大小和最大大小。 参数解释 -XX:InitialRAMPercentage:此参数用来设定 JVM 堆内存的初始大小,以系统可 […]
在 Java 里,触发垃圾回收(GC)的方式多种多样: 代码层面触发 1. 调用 System.gc() 或 Runtime.getRuntime().gc() 在 Java 代码中,可以调用 System.gc() 或者 Runtime.getRuntime().gc() 方法来建议 JVM 进行垃圾回收。不过要注意 […]
今天排查线上问题的时候,执行jmap -heap 1遇见一个报错: Error: -heap option used Cannot connect to core dump or remote debug server. Use jhsdb jmap instead 这是因为在较新的 JDK 版本中,jmap 工具的一 […]
大厂(转转、携程、京东)都用分代ZGC,卡顿降低20倍,吞吐量提升4倍 案例1: 携程的要全面升级jdk21 的消息: 网上有小道一个消息说携程要全面升级jdk8到jdk21了,jdk8其实是2014年正式发布的,正式发布已经有10年的时间了。 这次升级应该跟spring boot也有关,大家都知道从spring bo […]
问题背景 问题是,咱们常常说:发生OOM,程序就会挂。 很多情况是:发生OOM了,JVM没有挂。 回顾一下OOM与异常 来看一下 OutOfMemoryError,说到底,OutOfMemoryError 也只是一个java中的异常而已, OutOfMemoryError 属于Error一系非检查异常, 其继承关系如下 […]
发现问题 线上服务重启,好在抓到了线上服务的dump文件,下载到本地进行分析。 使用MAT打开快照文件,此处省略掉使用MAT的过程,分析发现有大量的com.netflix.servo.monitor.BasicTimer未释放,且被org.springframework.cloud.netflix.metrics.se […]
背景 本文仅是为了帮助入门新人了解什么是内存屏障、内存屏障都做了什么等基础问题,并无深入说明。 内存屏障的实现涉及大量硬件架构层面的知识,又需要操作系统或JVM的配合才能发挥威力,单纯从任何一个层面都无法理解。 如有疏漏,还望指正! 什么是内存屏障 内存屏障(Memory Barrier)是一个CPU指令。是硬件之上、 […]
三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。JVM中的CMS、G1垃圾回收器所使用垃圾回收算法即为三色标记法。 三色标记算法思想 三色标记法将对象的颜色分为了黑、灰、白,三种颜色。 白色:该对象没有被标记过。(对象垃圾) 灰色: […]
《深入理解java虚拟机》中说到GC Roots的节点主要在全局的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,但是进行根节点枚举的时候我们并不需要一个不漏地检查完所有执行上下文和全局引用位置,HotSpot中通过使用一组称为OopMap的数据结构,用于直接存放对象引用,类加载完成,HotSpo […]
JMX监控权限认证配置 JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。 1、非认证登录 -Dcom.sun.managem […]
本文简单说一说JVM应如何调优。 Java语言本身的成功,除了天时地利人和,JVM功不可没。 毫不夸张地说,JVM是现代软件工程最成功的案例之一。它规模庞大,代码极其复杂,但运行极其稳定可靠,所以,许多厂商的核心业务系统,才敢放心地用Java编写,运行在JVM之上。 因为JVM自带GC,又有无数可以微调的参数,所以,J […]
最近,遇到了两个和Java类的加载和卸载相关的问题: 1) 是一道关于Java的判断题:一个类被首次加载后,会长期留驻JVM,直到JVM退出。这个说法,是不是正确的? 2) 在开发的一个集成平台中,需要集成类似接口的多种工具,并且工具可能会有新增,同时在不同的环境部署会有裁剪(例如对外提供服务的应用,不能提供特定的采购 […]
一 背景知识 LINUX进程状态 LINUX 2.6以后的内核中,进程一般存在7种基础状态:D-不可中断睡眠、R-可执行、S-可中断睡眠、T-暂停态、t-跟踪态、X-死亡态、Z-僵尸态,这几种状态在PS命令中有对应解释。 D (TASK_UNINTERRUPTIBLE),不可中断睡眠态。顾名思义,位于这种状态的进程处于 […]
命令格式 jmap [ options ] pid jmap [ options ] executable core jmap [ options ] [ pid ] server-id@ ] remote-hostname-or-IP 参数说明 pid:目标进程的PID,进程编号,可以采用ps -ef | grep […]
我有一瓢酒,可以慰风尘。