Skip to content

面试速答(先看这里)

**一句话结论:**因为如果是网络和流量问题,要么就是会持续一会,要么就是所有机器都会存在。

60秒标准回答:

在服务发布过程中,应用刚刚启动好之后负载很高,过一会就恢复了,因为负载高之后很快就恢复了,那么一般来说可以排除代码问题。再根据观察看看是不是每台机器都有这种情况,以及是不是每一批启动的时候也都存在,那么就可以排除网络问题以及流量问题

因为如果是网络和流量问题,要么就是会持续一会,要么就是所有机器都会存在。不太会说只有刚刚发布的机器才有这个问题

那么,这个问题一般来说可能是以下几个原因

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**那么,这个问题一般来说可能是以下几个原因。
  • **要点2:**上面的两个问题,是比较常见的会导致这个问题的情况。
  • **要点3:**1、缓存预热 ,可以在应用发布过程中,在Spring启动时就对缓存进行预热。
  • **要点4:**2、小流量切流 ,在应用发布的时候,可以针对刚刚启动的机器进行小流量切流,比如先给10%流量,让他进行缓存预热以及JIT优化的处理,当持续一段时间后,再逐步放开流量。
  • **要点5:**3、分更多的批次 ,和上面的情况类似,只不过是通过分更多批次让每次启动的机器更少一点,让流量更加平均一些,减少缓存击穿、JIT优化带来的影响。

**记忆锚点:**JIT → 第一批发完后负载很高后面恢复正常 → 第一批请求会触发缓存 → 导致的资源抢占和缓存 → 服务发布分10批 → 启动时就对缓存

关键取舍:

  • 避免启动后预热导致的资源抢占和缓存击穿等问题。

易错提醒:

  • 避免启动后预热导致的资源抢占和缓存击穿等问题。
  • 让流量不要那么大。

加分表达:

  • 因为如果是网络和流量问题,要么就是会持续一会,要么就是所有机器都会存在。
  • JIT优化 :刚上线的代码会进行JIT优化,进行热点代码检测以及字节码生成。
  • 2、小流量切流 ,在应用发布的时候,可以针对刚刚启动的机器进行小流量切流,比如先给10%流量,让他进行缓存预热以及JIT优化的处理,当持续一段时间后,再逐步放开流量。

追问准备:

  • 围绕「JIT」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「第一批发完后负载很高后面恢复正常」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「第一批请求会触发缓存」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

在服务发布过程中,应用刚刚启动好之后负载很高,过一会就恢复了,因为负载高之后很快就恢复了,那么一般来说可以排除代码问题。再根据观察看看是不是每台机器都有这种情况,以及是不是每一批启动的时候也都存在,那么就可以排除网络问题以及流量问题。

因为如果是网络和流量问题,要么就是会持续一会,要么就是所有机器都会存在。不太会说只有刚刚发布的机器才有这个问题。

那么,这个问题一般来说可能是以下几个原因。

  • 缓存冷启动:第一批请求会触发缓存的冷启动,导致缓存未命中率高。

  • JIT优化:刚上线的代码会进行JIT优化,进行热点代码检测以及字节码生成。

📄 ✅Load飙高问题排查过程

打开文档:✅Load飙高问题排查过程

上面的两个问题,是比较常见的会导致这个问题的情况。那么如何解决呢?

1、缓存预热,可以在应用发布过程中,在Spring启动时就对缓存进行预热。避免启动后预热导致的资源抢占和缓存击穿等问题。

2、小流量切流,在应用发布的时候,可以针对刚刚启动的机器进行小流量切流,比如先给10%流量,让他进行缓存预热以及JIT优化的处理,当持续一段时间后,再逐步放开流量。

3、分更多的批次,和上面的情况类似,只不过是通过分更多批次让每次启动的机器更少一点,让流量更加平均一些,减少缓存击穿、JIT优化带来的影响。

4、提前扩容,有的公司也会这么干,比如我有50台机器,分10批,每一次就是5台。那么他可以先根据分批情况,扩容出来5台,就是一共55台,这样就能保证发布过程中线上还是至少同时有50台机器在对外提供服务的。也能减少服务器的压力。

5、限流,也可以在应用发布过中,针对这些刚刚启动的应用做限流。让流量不要那么大。