Spring REST - 经过较长的空闲时间后,第一次调用需要很长时间(5-10 秒)

Posted

技术标签:

【中文标题】Spring REST - 经过较长的空闲时间后,第一次调用需要很长时间(5-10 秒)【英文标题】:Spring REST - after longer Idle time the first calls take very long time (5-10 seconds) 【发布时间】:2018-01-04 04:34:39 【问题描述】:

我们在 Spring Boot(带有嵌入式 tomcat)和 Spring Cloud 上运行微服务。这意味着服务发现、定期健康检查以及响应这些健康检查的服务……我们还有用于监控的 spring boot 管理服务器,我们可以看到所有服务都运行正常。目前仅在测试环境中运行...

我们的一些微服务很少被调用(假设每两天调用一次),但仍然会定期进行健康检查。在这么长的空闲时间后调用这些服务的 REST api 时,第一个请求需要很长时间来处理。它当然会导致请求链中的断路器和错误打开断路器......我在使用 spring boot admin(Theads 列表,Metrics)调用不同的端点时也看到了这种行为。

作为总结,我在 spring boot admim 指标、线程信息、环境信息的调用或使用 Hikari 数据源调用数据库或服务尝试通过 smtp 服务器发送电子邮件的调用中看到了这种行为

我的问题是: 它与嵌入式服务器及其线程池的设置有关吗? 还是我应该深入研究这些请求所涉及的其他线程池和连接池? 有什么关于诊断的想法吗?

非常感谢

【问题讨论】:

我在一个私人项目中遇到过类似的问题......看起来,spring 懒惰地初始化了 REST-Components,这解释了当你第一次调用资源时等待时间更长 是的,你是对的,有一些延迟初始化,但这不是我的意思。这是关于在服务器启动后已经进行了几次调用,然后在长时间的空闲时间之后再次调用(并且花费了很长时间) 嗨 Lukas,你有没有在堆空间之外找到解决方案。我自己也有同样的问题 【参考方案1】:

问题在于没有足够的 RAM 来覆盖这些应用程序的整个堆...应用于多个虚拟机的错误设置。堆的一部分实际上正在交换。修复堆和 RAM 大小后问题就消失了。

【讨论】:

以上是关于Spring REST - 经过较长的空闲时间后,第一次调用需要很长时间(5-10 秒)的主要内容,如果未能解决你的问题,请参考以下文章

尝试优化执行时间较长的查询

系统自时间较长的 Chrome 性能分析

ImageView 中较长的 gif 持续时间

将较长的 PHP **for** 语句分成多行

有效期较长的 Facebook 访问令牌

带有附件和推送行为的 UIDynamicKit 会导致较长的振荡时间