Loading...
avatar
Articles
512
Tags
572
Categories
9
Home
Archives
Tags
Categories
About
守株阁如何排查线上问题 Back to Home
Search
Home
Archives
Tags
Categories
About

如何排查线上问题

Created2021-07-20|Updated2026-06-29|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
2020-09-27
现代垃圾收集器
所有的垃圾收集器,都基于弱分代假设。实际的垃圾回收效率取决于堆内对象的分布状况。垃圾回收并不能解决内存泄漏或者应用程序逻辑的不良分配习惯问题,要处理 JVM 内存回收问题的根本方法是对程序进行调优。 有几个常用原则: 减少临时对象,尽量复用内存。 使用对象池。 主动提前释放对象。 主动 gc。 好的代码比 tuning 更重要。 选 gc 算法比 tuning 参数重要,tuning 参数是最后一步。 其他情况,可以通过 tuning garbage collector 来解决。 操作系统的影响 SWAP 可能会显著增加 GC 时间,因为被换出的堆还要被换入。 美团的实践 参考: 《从实际案例聊聊Java应用的GC优化》 《Java中9种常见的CMS GC问题分析与解决》 Minor GC Major GC Full GC 垃圾收集器分类 可以看到一个现象:在大部分时候,g1 比 CMS 快,但极端的百分位里,CMS 比 g1 快。 出处见这里。 常用工具 命令行终端 标准终端类:jps、jinfo、jstat、jstack、jmap 功能整合类:jcm...
cover
2017-10-30
JVM 与编译优化
Java 的编译分期,至少可以分为两个阶段(有些情况下还有额外的第三种编译过程): 编译前端(前端编译):把 *.java 变成 *.class 文件的过程。也就是把源语言文件变成中间语言文件的过程。典型的例子有:javac、Eclipse 的 ECJ 的工作过程。 编译后端(后端编译):由 JIT(Just In Time Compiler)把中间语言(字节码)转换成二进制目标体系结构机器码的过程。典型的例子有 HotSpot 的 C1、C2 编译器的工作过程。 AOT(Ahead Of Time)编译器直接把源代码编译成二进制目标体系结构机器码的过程。 早期(编译)优化 javac 自从 1.3 版本已经不再支持 -O 的优化了。所有的优化策略集中到后端编译里。这样没有经过 javac 编译的 JRuby、Jython 程序,也可以享受到 JVM 的优化福利。 javac的编译过程,大致上是: 解析和填充符号表(Parse and Enter)。 注解处理(Annotation Processing,Java 5以后加入的过程)。 分析与字节码生成(Analyze an...
cover
2018-10-22
JDWP 与远程调试
JDWP(Java Debug Wire Protocol),它提供了调试器和目标 JVM (target vm)之间的调试协议。 在 target vm 启动时,增加这个 JAVA_OPTS: 1JAVA_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=26310" 在服务器端,增加 remote debuging 的时候使用如下配置: 12345678# Java 9 以上-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000# Java 5-8-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000# Java 1.4.x -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,addre...
cover
2026-05-17
从 OSGi 到 Jigsaw:Java 模块化、SPI 与类加载器切换
写在前面 Java 的模块化不是从 JPMS 才开始的。很长一段时间里,classpath 像一条足够宽的路,所有 jar 都往上面放,能跑就行。等应用长大,库的版本开始冲突,内部包被外部代码依赖,插件想热更新,SPI 实现又被错误的类加载器发现,这条路才慢慢暴露出它没有边界的问题。 OSGi、JBoss Modules、Jigsaw(JPMS)都试图在 classpath 之上重新划边界,只是三者选择的边界不一样。OSGi 把运行时动态性放在第一位,JBoss Modules 更关心应用服务器内部的静态隔离,JPMS 则把强封装和可靠配置做进了 Java 平台本身。 类加载器切换是这条线上的另一面。Tomcat reload 之后类没卸掉、OSGi 升级 bundle 之后老对象 ClassCastException、JDBC Driver 把整个 webapp 钉在内存里、Spring Boot DevTools 重启后某个 SPI 实现加载了旧版本,这些现象表面上属于不同框架,根子都在 JVM 的类身份模型:一个类不只由全限定名决定,还由定义它的 ClassLoader 决...
cover
2017-10-27
基于栈的虚拟机
基于栈的虚拟机 全景导图 mindmap root((基于栈的虚拟机)) 核心架构 操作数栈 局部变量表 栈帧 执行机制 字节码指令 基于栈的运算 指令集简洁性 设计优势 可移植性 代码紧凑 实现简单 典型应用 JVM Python虚拟机 .NET CLR 模式总览 # 模式名称 一句话口诀 覆盖场景 1 栈式计算 数据流与控制流分离,操作数隐式传递 JVM字节码执行、表达式求值、递归调用 2 栈帧隔离 每个方法调用独立的执行上下文 方法调用、异常处理、线程隔离 3 指令紧凑 操作数位置编码在指令中,减少指令长度 字节码压缩、跨平台分发 问题定义 为什么选择基于栈的虚拟机架构,而非基于寄存器的架构?这种设计如何影响字节码的生成、执行效率以及跨平台可移植性? 核心概念 虚拟机架构分类 虚拟机按照指令集架构主要分为两类: 基于栈的虚拟机:指令不指定操作数的位置,操作数从栈顶弹出...
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.5.5
Search
Loading Database