持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
前言
最近有小伙伴面试的时候遇到的开放性问题,你在平时项目上遇到线上问题如何排查?
这种开放的问题其实比较难回答,涉及到的知识点太多了,下面就我的理解大概讲下对应需要知道的知识点,和常见问题排查的手段和方法,可能并不适用所有的场景,给大家一个思路。
思维导图
1、首先JDK自带的常用命令, jstack 分析堆栈线程快照, jmap 内存快照,jstat可以分析垃圾回收gc的一些情况。
2、如何生成dump文件?生产没有权限怎么办?联系运维按照对应需要哪些dump文件去生成。
3、如何分析dump文件, jstack生成的dump个人比较推荐easygc网站分析,jmap生成的dump文件可以用jprofile去分析。
4、Arthas 阿尔萨斯,Arthas 用户文档 — Arthas 3.6.1 文档 (aliyun.com)
注意:jmap命令生成dump文件,JVM是暂停服务的,所以对线上的运行会产生影响。
常见线上问题排查的步骤
问题的分析方法5W1H,什么时间什么地方发送了什么事情,为什么?怎么去做
1、分析和查看问题的原因,比如说收到线上的告警,或者生产服务巡检的时候发现服务的异常,比如大促秒杀活动瞬间流量飙升,服务的宕机,或者服务器内存告警等等。
2、如何分析,具体问题具体分析,是死锁,还是内存泄漏,我们是要获取线程堆栈快照dump,还是内存转储的dump, 常见的top命令查看进程的cpu和内存
3、分析工具,线程堆栈,是不是有大量的堆栈线程Block或者是DeadLock, 或者等待资源WAIT状态, 内存转储分析,jprofile看是不是存在大对象,为什么会有频繁的fullgc, 年轻代,老年代按照默认的配置是不是不满足自己系统的场景。
4、怎么做?可以看下常见优化的策略,jvm调优,扩大内存,是不是锁的粒度太大等等,需要具体问题具体分析了。
经典案例
JDK1.8 ConcurrentHashMap的死锁问题分析 - 掘金 (juejin.cn)
APNS开源包的内存泄露问题
Java服务,CPU100%问题如何快速定位?
Java服务,内存OOM问题如何快速定位?
史上最全的高可用服务系统线上问题排查工具单(一)
史上最全的高可用服务系统线上问题排查工具单(二)