站长网 数码 阿里面试题:线上接口变慢,如何解决

阿里面试题:线上接口变慢,如何解决

这是面试阿里时的一道题,也是平时工作中处理线上问题经常遇到的一类问题,所以耐心看完吧,无论是工作还是面试,帮助都很大。 首先线上接口变慢,原因可能有很多,有可能是网络,有可能是慢 SQL,有可能是服务本身出现了问题,还有可能是机器达到了性能瓶

这是面试阿里时的一道题,也是平时工作中处理线上问题经常遇到的一类问题,所以耐心看完吧,无论是工作还是面试,帮助都很大。

首先线上接口变慢,原因可能有很多,有可能是网络,有可能是慢 SQL,有可能是服务本身出现了问题,还有可能是机器达到了性能瓶颈。而机器性能瓶颈也又可以分为磁盘 IO 瓶颈、CPU 性能瓶颈、网卡瓶颈等等,本文主要从 CPU 出现性能瓶颈这个角度来分析下问题出现在哪儿。

为什么选 CPU 来分析呢?这是因为这通常是我们排查问题的第一步,自下而上排查,而通过 CPU 往往能帮助我们分析出问题出现在哪儿。

top

首先使用 top 命令,可以看到机器有多少个 CPU,以及 CPU 过去 1 分钟、5 分钟、15 分钟的平均负载,各个 CPU 的使用率等信息。今天主要分析下 CPU 的负载和使用率的区别,这两个指标经常容易搞混。

CPU 的负载(load)和使用率(utilization)

首先,需要明确的是,CPU 的负载(load)和使用率这两个指标并不是一码事。第一,它们的计算公式不一样,也就是说它们所代表的含义也就不一样;第二,这两个指标如果异常,我们排查问题的方向也就不同。

负载的计算公式

load = (D+R)/SUM(ALL)

D 和 R 是什么意思呢?

一台 linux 机器在运行时会有很有很多进程,这些进程按照状态可以细分为 7 类:

D(TASK_UNINTERRUPTIBLE)状态:不可中断的睡眠状态,处于睡眠状态,但是不可以被中断。一般由 IO 等待引起(磁盘 IO,网络 IO、外设 IO 等),出现非常短暂,一般很难用 ps 或者 top 等工具捕捉到,sleep 状态下的进程不会占用 CPU 资源。

R(TASK_RUNNING)状态:可执行状态,这种进程处于 CPU 的可执行队列中,正在运行或者等待 CPU 运行。

S(TASK_INTERRUPTIBLE)状态:可中断的睡眠状态,不同于 D,该状态下的进程也是休眠状态,但是可以被中断。这种进程一般在等待某种事件的发生,例如:socket 连接、信号量等。一但这些时间啊完成,进程就会被唤醒,如果不是在高负载时期,大部分进程都处于 S 状态,不占用 CPU 资源。

T(TASK_STOPPED)状态:暂停状态,进程处于停止运行状态。

t(TASK_TRACED)状态:跟踪状态。

Z(EXIT_ZOMBIE)状态:僵死态,这种进程实际上已经结束运行了,只不过父进程还没有回收它的资源(比如进程的描述符、PID 等),僵死进程会释放掉除了进程入口之外的所有资源。

X(EXIT_DEAD)状态:死亡态

「因此 D+R 表示的是机器的整体负载,即 CPU 负载(正在运行着的进程)+Disk 负载+网络负载+其他外设负载,当出现负载高时,那么问题可能不仅仅出现在 R 态的进程,还有可能是磁盘和网络 IO 引起的。」

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/yidong/sm/2021/0525/6296.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部