Java面试经验个人总结(十六)——线上问题定位

线上问题定位

一、前言

1. 应用bug出现原因

(1)引入第三方库

(2)环境原因

(3)硬件

2. 现象

(1)请求超时;

(2)系统发生明显卡顿

 

二、常见线上问题

1. 所有 Java 服务的线上问题从系统表象来看归结起来总共有四方面:CPU、内存、磁盘、网络。例如 CPU 使用率峰值突然飚高、内存溢出 (泄露)、磁盘满了、网络流量异常、FullGC 等等问题。

2. 系统异常

(1)常见系统异常现象

a. CPU占用率过高

b. CPU上下文切换次数高,比如频繁从一个进程切换到另一个进程;

c. 磁盘空间不足;

d. 磁盘IO过于频繁;

e. 网络流量异常,比如连接数过多;

f. 系统可用内存低;

(2)获取异常现象数据工具

可以通过 top(cpu)、free(内存)、df(磁盘)、dstat(网络流量)、pstack、vmstat(虚拟内存统计)、strace(底层系统调用) 等工具获取系统异常现象数据;

(3)JVM定位问题工具

a. jps: 查询当前机器所有 JAVA 进程信息;  

b. jmap: 输出某个 java 进程内存情况 (如:产生那些对象及数量等);  

c. jstack: 打印某个 Java 线程的线程栈信息;

d. jinfo: 用于查看 jvm 的配置参数。

3. 业务服务异常

(1)现象

a. 页面浏览量过高;

b. 服务调用耗时异常

c. 线程死锁

d. 多线程并发问题

e. 频繁full GC

f. 异常安全攻击扫描

 

三、问题定位

1. 排除法

(1)首先我们要排除其他进程 (除主进程之外) 可能引起的故障问题;

(2)然后排除业务应用可能引起的故障问题;

(3)可以考虑是否为运营商或者云服务提供商所引起的故障

2. 定位流程

(1)系统异常定位

Java面试经验个人总结(十六)——线上问题定位_第1张图片

 

(2)业务应用异常定位

 

Java面试经验个人总结(十六)——线上问题定位_第2张图片

 

四、日志分析

1. GC日志

Java 虚拟机 GC 日志是用于定位问题重要的日志信息,频繁的 GC 将导致应用吞吐量下降、响应时间增加,甚至导致服务不可用。利用指令-XX:+PrintGCDetails来获取GC详细日志;

2. 业务日志

业务日志除了关注系统异常与业务异常之外,还要关注服务执行耗时情况,耗时过长的服务调用如果没有熔断等机制,很容易导致应用性能下降或服务不可用,服务不可用很容易导致雪崩。

3. 日志聚合分析

需要一套分布式链路调用跟踪系统,通过在系统线程上线文间透传 traceId 和 rpcId,将所有日志进行聚合,例如淘宝的鹰眼,spring cloud zipkin 等等。

你可能感兴趣的:(Java面试经验个人总结(十六)——线上问题定位)