阿里P7面试之生产环境变慢问题,排查思路

时间:2024-05-30 17:15:26

前提:面试我的阿里的哥们儿听到我这么详细的分析了一波,我从他的语气里面看出,他大概知道,我做过这方面的分析,但是光是这些分析,也只能说明一些基础的问题,还是得在工作中实战的去总结问题。

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

  1.2.服务器全局慢包括cpu 慢,内存慢,io/磁盘慢,io/网络慢。

  1.3.服务器局部慢指得是发现某一个或者多个服务很慢。

2.全局查询思路:

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

202008 阿里P7面试之生产环境变慢问题,排查思路

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

202008 阿里P7面试之生产环境变慢问题,排查思路
  在当前这个界面,按下数字键盘1刷新信息,能够看到各个 CPU(多核情况) 的详细利用率变化,按下数字键盘m ,能够查看内存使用情况.

  2.2 vmstat 命令(cpu 内存 io 系统)

vmstat -n 3 2 

202008 阿里P7面试之生产环境变慢问题,排查思路

-n 3 2 间隔3秒采集2次

procs :
r :运行和等待 CPU 时间片的进程数,一般来说整个系统的运行队列不要超过总核数的 2 倍,要不然系统压力太大了
b : 等待资源的进程数,比如正在等待磁盘 IO ,网络 IO 这种

cpu :
us  :用户进程消耗 CPU 时间百分比, us 值高的话,说明用户进程消耗 CPU 时间比较长,如果长期大于 50% 的话,那就说明程序还有需要优化的地方
sy :内核进程消耗的 CPU 时间百分比
us + sy 参考值为 80% ,如果大于 80% 的话,说明可能存在 CPU 不足

  2.3 free(内存)

free -m 

202008 阿里P7面试之生产环境变慢问题,排查思路

  2.4 df (磁盘使用情况)

df -h 

202008 阿里P7面试之生产环境变慢问题,排查思路

  2.5 iostat(cpu 核心数,网络io)

iostat -xdk 3 2

202008 阿里P7面试之生产环境变慢问题,排查思路

rkB/s :每秒读取数据量 kB ;
wkB/s :每秒写入数据量 kB ;
svctm :I/O 请求的平均服务时间,单位毫秒;
util :一秒中有百分之几的时间用于 I/O 操作,如果接近 100% 说明磁盘带宽跑满了,这个时候就要优化程序或者增加磁盘了

3.局部查询思路。

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

  3.1  jps -ln (查看java 进程)

202008 阿里P7面试之生产环境变慢问题,排查思路

  3.2 jmap -histo {pid}

202008 阿里P7面试之生产环境变慢问题,排查思路

grep 一下GC 的信息,也可以查询GC 的 信息。(这里就能查询到是否都是FULL GC)

202008 阿里P7面试之生产环境变慢问题,排查思路

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