我有一个 Sprint Boot API 应用程序,该应用程序大约每月都会遇到一次速度下降的情况。纠正此问题的唯一方法是重新启动应用程序。
对 API 的指标和使用情况的调查帮助我们发现,向特定控制器发送垃圾邮件 HTTP 请求会导致抛出异常,从而导致 CPU 利用率无法恢复正常。当请求被垃圾邮件发送时,CPU 利用率始终徘徊在 25-35% 之间。重现的具体步骤是:
使用 Java Visual,我们可以看到当 HTTP 请求停止时 cpu 利用率徘徊在 25% 左右:
我们尝试了多种方法,例如升级 Spring Boot 版本、将系统变量 LatencyUtils.useActualTime 设置为 false、执行垃圾收集等。
当我们查看堆直方图时,我们可以看到实例数最高的类是 io.micrometer.core.instrument.Tag[]:
任何建议将不胜感激:)
当应用程序未收到任何请求时,CPU 利用率/内存将返回到空闲级别
有几种情况 CPU 利用率是一致的 -