目录
[1. Java 常⻅线上问题总结](#1. Java 常⻅线上问题总结)
[2 如何定位问题?](#2 如何定位问题?)
[2.1 业务⽇志分析排查](#2.1 业务⽇志分析排查)
[2.2 APM 分析排查](#2.2 APM 分析排查)
[2.4 应⽤服务排查](#2.4 应⽤服务排查)
[2.4.1 CPU 分析](#2.4.1 CPU 分析)
[2.4.2 内存分析](#2.4.2 内存分析)
[2.4.3 云⼚商或运营商问题排查](#2.4.3 云⼚商或运营商问题排查)
在软件开发过程中,排查和修复产线问题是每⼀位⼯程师都需要掌握的基本技能。但是
在⽣产环境中,程序代码、硬件、⽹络、协作软件等任⼀因素,都会引发意想不到的问题,所以排查产线问题⽐较困难,所以问题的定位体现了⼀名⼯程师的基础能⼒,问题的解决则体现了⼯程师的技能素养。
下面我们将从 5 个⽅⾯分享产线常⻅问题的排查⼿段。
-
Java 常⻅线上问题总结
-
如何定位问题
-
APM 链路跟踪分析
-
常⽤Linux 分析命令
-
Arthas诊断命令
-
JVM 问题定位命令
-
GC 分析
1. Java 常⻅线上问题总结
绝⼤多数 Java 线上问题从表象来看通常可归纳为 4 个⽅⾯:CPU、内存、磁盘、⽹络。
⽐如,应⽤上线后突然 CPU 使⽤率 99%、内存泄漏、STW 时间过⻓,这些问题通常可以分为两⼤类:
1.系统异常 (CPU 占⽤率过⾼、磁盘使⽤率 100%、系统可⽤内存低等)
2.业务异常 (服务运⾏⼀段时间⾃动退出、服务间调⽤时间过⻓、多线程并发异常、死锁等)
2 如何定位问题?
解决问题的第⼀步是定位问题,因为只有定位到了问题产⽣的原因,才能准确的抉择出解决⽅案,排查⼿段⼀般包括以下⼏项,也可以将此理解为排查顺序:
-
业务⽇志分析排查
-
APM 分析排查
-
外部环境排查
-
应⽤服务排查
-
云⼚商或运营商问题排查
2.1 业务⽇志分析排查
通常情况下,⼤部分错误信息都会在⽇志上有所体现,这个我们大部分开发人员根据项目日志可以具体定位到代码行及根本原因。
2.2 APM 分析排查
APM,全称 Application Performance Management,应⽤性能管理,⽬的是通过各种探针采集数据,收集关键指标,同时搭配数据呈现以实现对应⽤程序性能管理和故障管理的系统化解决⽅案。通过分布式链路调⽤跟踪系统,通过在系统请求中透传 trace-id,将所有相关⽇志进⾏聚合,然后⽇志统⼀采集和分析后,以图形化的形式展示给⼯程师们,⽽他们在排查问题的时候,可以简单粗暴且直观的调度出问题最根本的原因。业务⽇志较优于解决单体服务异常,但现在的应⽤通常使⽤的是分布式架构,⽽在分布式系统中,仅通过单服务节点的⽇志,很难将错误信息与请求链路关联在⼀起,也就是通过系统中某个服务的异常⽇志信息很难定位到问题的根本原因。并且我们还需要关注各服务执⾏过程中的耗时情况,及时的发现异常服务,并根据异常信息进⾏修复。要满⾜这种需求,仅通过分析单个服务的⽇志信息是不够的,此时则需要 APM 进⾏全链路分析,通过请求链路监控,实时的发现链路中相关服务的异常情况。


⽐如我们使⽤Skywalking,进⼊到 Skywalking 的控制台查看的链路信息就是这样的:

目前市场上使⽤较多的链路跟踪⼯具有如下⼏个:
ApacheSkywalking:https://skywalking.apache.org/
Pinpoint:https://pinpoint.com/product/for-engineers
SpringCloudZipkin:
https://docs.spring.io/spring-cloud-sleuth/docs/current-SNAPSHOT/referenc
e/html/#sending-spans-to-zipkin
2.3物理环境排查
物理环境是指⼯程所依附的物理环境,⽐如服务器、宿主机、容器等,细分为服务器负
载、CPU、内 存、磁盘、⽹络⼏个⽅⾯。
2.3.1CPU分析
排查CPU的⽬的主要是查看服务器CPU的使⽤率,使⽤top命令分析CPU使⽤情况
2.3.2内存分析
使⽤free-m命令查看内存使⽤情况
2.3.3磁盘分析
使⽤df-h、iostat、lsof等命令查看磁盘IO情况,找到读写异常的进程
2.3.4⽹络分析
使⽤dstat、vmstat等命令查看⽹络流量、TCP连接等情况,分析异常流量
2.4 应⽤服务排查
应⽤排查,排查应⽤本身最有可能引发的问题,针对各种场景进⾏对应分析
2.4.1 CPU 分析
使⽤jstack 等命令进⾏JVM 分析
2.4.2 内存分析
使⽤jmap 等命令分析内存使⽤情况
2.4.3 云⼚商或运营商问题排查
排查到了这⼀步的话,只需关注云⼚商或运营商官⽅公告即可。
假设我们从业务⽇志、APM 分析中都没分析出问题所在,那么此时基本只能连接到⽣产环境中进⾏排查 ········
下篇写在生产环境中Linux ,Arthas 诊断及JVM及GC 问题分析排查