Loading...
avatar
Articles
1748
Tags
1820
Categories
32
Home
Archives
Tags
Categories
About
守株阁如何排查线上问题 Back to Home
Search
Home
Archives
Tags
Categories
About

如何排查线上问题

Created2021-07-20|Updated2026-10-08|Java
|Word Count:30|Reading Time:1mins|Post Views:

cpu 偏高问题排查

cpu偏高问题排查
cpu偏高问题排查.xmind

数据库问题排查

数据库问题排查.xmind
数据库问题排查(rds泛指一切关系型数据库,主要看MySQL)

Author: magicliang
Link: https://magicliang.github.io/2021/07/20/%E5%A6%82%E4%BD%95%E6%8E%92%E6%9F%A5%E7%BA%BF%E4%B8%8A%E9%97%AE%E9%A2%98/
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
JVM线上问题排查
Related Articles
cover
2018-10-13
卡表和 RSet
卡表和 RSet 问题定义:为什么需要跨区域引用记录 JVM 垃圾收集器的核心工作之一是确定 live set——哪些对象仍然存活、不可回收。确定 live set 的标准做法是从 GC Roots(栈帧中的局部变量、静态字段等)出发,沿引用链遍历所有可达对象。 问题在于:当堆被划分为多个区域(代、Region)并且只回收其中一部分时,如何高效地找到从"不回收区域"指向"回收区域"的引用? 以 Young GC 为例:只回收新生代,但老年代中可能持有指向新生代对象的引用。如果不处理这些跨代引用,就会错误地回收仍被老年代引用的新生代对象。最朴素的做法是扫描整个老年代来找出这些引用——但老年代通常远大于新生代,这样做的代价过高,违背了分代收集"只回收一部分堆"的初衷。 卡表(Card Table)和 RSet(Remembered Set)正是为解决这个问题而设计的辅助数据结构。二者的关系并非互相替代,而是层次不同、协作互补:卡表是底层的脏标记机制,RSet 是建立在卡表之上的更高层索引结构。 核心概念速览 在深入细节之前,...
cover
2020-03-08
JMX 深度历险
JMX 常见指标 JVM 指标 系统指标 System 相关指标 描述 system.load.average 系统load,如果是docker,此指标收集的物理机的load cpu.system.load.percent 系统所有进程占用cpu的百分比 cpu.jvm.load.percent jvm占用cpu的百分比 system.process.used.phyical.memory 系统使用的物理内存 system.process.used.swap.size 系统使用的swap内存 JVM 内存指标 JVM相关指标 描述 jvm.gc.count GC的次数 jvm.gc.time GC的时间,单位毫秒 jvm.younggc.count 年轻代GC的次数 ,包括的GC算法(Copy,ParNew,PS Scavenge,G1 Young Generation) jvm.younggc.time 年轻代GC的时间,单位毫秒 jvm.fullgc.count 年老代GC的次数,包括的GC算法 jvm.f...
cover
2026-01-19
线程安全与锁优化
版本说明:本文主要基于 JDK 6 ~ JDK 14 的 HotSpot 虚拟机实现。需要注意的是,从 JDK 15 开始,偏向锁已被默认关闭并标记为废弃(JEP 374)。如果你使用的是 JDK 15+,文中关于偏向锁的内容仅作为历史参考。 线程安全 什么是线程安全 “当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的。” 相对的线程安全,可以分成五个等级。但在深入讨论线程安全的分类之前,我们需要先理解 Java 内存模型——它是理解线程安全问题的理论基础。 Java 内存模型基础 Java 内存模型(Java Memory Model,JMM)是 Java 语言规范的一部分,定义了多线程程序中共享变量的访问规则。理解 JMM 是理解线程安全问题的基础。 为什么需要内存模型? 现代计算机系统中,CPU 与主内存之间存在巨大的速度差异。为了弥补这一差距,硬件层面引入了多级缓存(L1、L2、L3 Cache)。这带来了一个问...
cover
2026-05-21
进程启动期的静默故障:JVM 与 Node.js 的调试方法论
很多人都遇到过这种场景:一个 JVM 进程因为 -Xmx 写错了一个字符,启动起来就死掉,控制台一行日志都没有;一个 Node.js CLI 比如 opencode 在前台 hang 住,光标不闪,也不退出;一个 Spring Boot 服务被 systemd 拉起来,systemctl status 显示 running,但端口永远不开。stderr 看不到、源码也没有,只能反复重启。 这类问题的共同点不是程序"出 bug",而是进程在"出第一行日志"之前就已经失败或卡住。常规的"看日志找异常"那一套这时候没东西可看。需要的是另一类方法论:把进程当黑盒,从外部撬开它的状态。 一、先把"看不到日志"分成四种情况 把"启动期黑盒"展开来看,至少是四种性质完全不同的故障。混在一起调,方向就错了。 类别 特征 进程状态 主要工具方向 A. crash 静默 进程已经退出,但没看到任何 stderr 不存在 找输出去向;看 OS / runtime 留下的尸检文件 B....
cover
2017-10-27
基于栈的虚拟机
基于栈的虚拟机 全景导图 模式总览 # 模式名称 一句话口诀 覆盖场景 1 栈式计算 数据流与控制流分离,操作数隐式传递 JVM字节码执行、表达式求值、递归调用 2 栈帧隔离 每个方法调用独立的执行上下文 方法调用、异常处理、线程隔离 3 指令紧凑 操作数位置编码在指令中,减少指令长度 字节码压缩、跨平台分发 问题定义 为什么选择基于栈的虚拟机架构,而非基于寄存器的架构?这种设计如何影响字节码的生成、执行效率以及跨平台可移植性? 核心概念 虚拟机架构分类 虚拟机按照指令集架构主要分为两类: 基于栈的虚拟机:指令不指定操作数的位置,操作数从栈顶弹出,计算结果压入栈顶 基于寄存器的虚拟机:指令显式指定寄存器编号,操作数从寄存器读取,结果写入寄存器 JVM 采用基于栈的架构,这是其跨平台可移植性的关键设计决策之一。 操作数栈 操作数栈是基于栈虚拟机的核心数据结构。每个线程拥有独立的虚拟机栈,每个方法调用创建一个栈帧,栈帧中包含操作数栈。 操作数栈的特点: 后进先出(LIFO)的数据结构 32位数据占用1个栈单位,64位数据(long、double)占...
cover
2026-04-19
Java栈帧省略机制详解:为什么异常堆栈会消失?
引言:诡异的异常堆栈消失现象 线上服务报错时,你打开日志准备排查问题,却发现异常堆栈信息神秘消失了: 1java.lang.NullPointerException 只有短短一行异常类名,没有完整的堆栈跟踪。你可能会怀疑:是日志框架出问题了?还是被什么拦截器截断了? 其实,这是 JVM 的一个性能优化机制,叫做 OmitStackTraceInFastThrow(快速抛出时省略堆栈跟踪)。从 JDK 5 开始引入,默认启用。 本文将深入剖析这个机制的设计动机、工作原理、触发条件,以及如何正确应对。 一、问题场景:异常堆栈去哪了? 1.1 复现现象 用一段简单的代码就能复现: 123456789101112public class ExceptionOmitDemo { public static void main(String[] args) { String msg = null; for (int i = 0; i < 500000; i++) { try { ...
Contents
  1. 1. cpu 偏高问题排查
  2. 2. 数据库问题排查
© 2017 - 2026 By magicliangFramework Hexo 8.1.2|Theme Butterfly 5.7.0
Search
Loading Database