接口响应过慢怎样排查?

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 服务变慢
    • 服务器全局慢
        • 包括cpu 慢,内存慢,io/磁盘慢,io/网络慢。
    • 服务器局部慢
        • 指得是发现某一个或者多个服务很慢。
  • 1.全局查询思路
    • 1.1 服务器整体情况(top)----- 进程,cpu,内存
    • 1.2 cpu使用情况(vmstat)
    • 1.3 内存(free)
    • 1.4 磁盘(df)
    • 1.5 磁盘io(iostat)
  • 2.局部查询思路
    • jps -ln (查看java 进程)
    • jmap -histo {pid}
    • grep waiting on
    • 服务变慢排查思路:


服务变慢

生产环境变慢问题,变慢这个问题主要是感官上的变慢,究其原因有两方面服务器全局慢服务器局部慢

服务器全局慢

包括cpu 慢,内存慢,io/磁盘慢,io/网络慢。

服务器局部慢

指得是发现某一个或者多个服务很慢。

1.全局查询思路

  • cpu 慢
  • 内存慢
  • io/磁盘慢
  • io/网络慢

1 top 命令(进程,cpu,内存)

1.1 服务器整体情况(top)----- 进程,cpu,内存

接口响应过慢怎样排查?_第1张图片
top命令说明

  • 第 1 行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)
  • 第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。一般情况下,只要没有僵死的进程,就没啥大问题。
  • 第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
  • 第 4 行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量
  • 第 5 行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量
  • 第 6 行里面主要看 PID 和 COMMAND 这两个参数,其中 PID 就是进程 ID , COMMAND 就是执行的命令,能够看到比较靠前的两个进程都是 java 进程

在当前这个界面,按下数字键盘 1 能够看到各个 CPU 的详细利用率
接口响应过慢怎样排查?_第2张图片

1.2 cpu使用情况(vmstat)

接口响应过慢怎样排查?_第3张图片
接口响应过慢怎样排查?_第4张图片

1.3 内存(free)

接口响应过慢怎样排查?_第5张图片

1.4 磁盘(df)

接口响应过慢怎样排查?_第6张图片

1.5 磁盘io(iostat)

接口响应过慢怎样排查?_第7张图片
接口响应过慢怎样排查?_第8张图片
接口响应过慢怎样排查?_第9张图片
接口响应过慢怎样排查?_第10张图片

2.局部查询思路

top 发现有问题的进程,对于进程进行查看,这里我只说java 进程的服务,cpu 标高,怀疑内存泄漏导致的full
gc 还有就是线程死锁,

jps -ln (查看java 进程)

在这里插入图片描述

jmap -histo {pid}

接口响应过慢怎样排查?_第11张图片
grep 一下GC 的信息,也可以查询GC 的 信息。(这里就能查询到是否都是FULL GC)

grep waiting on

(这里就可以查看到是否是有线程死锁的问题)

服务变慢排查思路:

  1. 是不是资源层面的瓶颈,硬件、配置环境之类的问题
  2. 针对查询类接口,是不是没有添加缓存,如果加了,是不是热点数据导致负载不均衡
  3. 是不是有依赖于第三方接口,导致因第三方请求拖慢了本地请求
  4. 是不是接口涉及业务太多,导致程序执行跑很久
  5. 是不是sql层面的问题导致的数据等待加长,进而拖慢接口
  6. 网络层面的原因?带宽不足?DNS解析慢
  7. 确实是代码质量差导致的,如出现内存泄漏,重复循环读取之类

你可能感兴趣的:(项目--架构,interview,java)