Spring Boot API CPU 在处理错误时未返回空闲级别

问题描述 投票:0回答:1

我有一个 Sprint Boot API 应用程序,该应用程序大约每月都会遇到一次速度下降的情况。纠正此问题的唯一方法是重新启动应用程序。

对 API 的指标和使用情况的调查帮助我们发现,向特定控制器发送垃圾邮件 HTTP 请求会导致抛出异常,从而导致 CPU 利用率无法恢复正常。当请求被垃圾邮件发送时,CPU 利用率始终徘徊在 25-35% 之间。重现的具体步骤是:

  1. 使用无限循环执行 bash 脚本来发送抛出异常的 HTTP 请求(运行多个实例)
  2. 等到服务器CPU利用率达到100%
  3. 等待15分钟
  4. 停止 bash 脚本中的无限循环

使用 Java Visual,我们可以看到当 HTTP 请求停止时 cpu 利用率徘徊在 25% 左右: enter image description here

我们尝试了多种方法,例如升级 Spring Boot 版本、将系统变量 LatencyUtils.useActualTime 设置为 false、执行垃圾收集等。

当我们查看堆直方图时,我们可以看到实例数最高的类是 io.micrometer.core.instrument.Tag[]: enter image description here

任何建议将不胜感激:)

当应用程序未收到任何请求时,CPU 利用率/内存将返回到空闲级别

java spring spring-boot heap
1个回答
0
投票

有几种情况 CPU 利用率是一致的 -

  1. 检查数据库连接池大小
  2. 任何使用过的执行器服务在使用后不会关闭
  3. 任何线程池执行器服务 sed - 检查核心线程
© www.soinside.com 2019 - 2024. All rights reserved.