【问题标题】:JVM / Spring boot response times [closed]JVM / Spring启动响应时间[关闭]
【发布时间】:2016-08-05 00:22:22
【问题描述】:

我目前正在用 Spring Boot 重写一个 Ruby on Rails 网络应用程序。此举的很大一部分是为了提高性能。

在开发应用程序时,当我在 IntelliJ 中点击运行时,第一个响应时间通常是 1 秒左右,我认为这是 JVM 启动,刷新后它会跳到 300 毫秒~ 然后 150 毫秒,4-5 个进一步请求,之后它在大多数情况下稳定在 50-75 毫秒。随机,但稍后我会再次收到 150 毫秒的响应。

作为一名 JVM 新手,我想知道在不同的响应时间中有哪些因素在起作用?哪个更接近我在生产中可以预期的标准“热”响应时间?我意识到我不太可能准确描述本地开发机器上的生产性能,但我想了解上面看到的差异,这样我至少可以更好地衡量影响我的增量更改的因素。

【问题讨论】:

  • 这是在您本地工作站上的 intelliJ 中运行的,您担心 150 毫秒的响应时间?考虑到 intellij 正在使用大量内存并且正在执行大量任务、GC 等。
  • @ScaryWombat 一点也不担心,所有上述响应时间都比他们要替换的应用程序快几个因素,并且在可接受的范围内。只是想更好地了解所看到的变化发生了什么。
  • 当然,您的工作站上还有哪些其他任务? Linux 还是 Windows? GC?交换?其他系统io?
  • @ScaryWombat 我正在运行 OSX。从 150 毫秒到 50-75 毫秒的“热身”模式似乎是一致的,尽管每次我运行应用程序时都不管我在做什么。我猜这很正常,如果是这样,那么几分钟后它会在没有请求的情况下再次“冷却”吗?这肯定会解释我所看到的。

标签: java spring spring-boot jvm


【解决方案1】:

作为一名 JVM 新手,我想知道在不同的响应时间中有哪些因素在起作用?

启动:

  • jit 预热
  • 作为应用程序一部分的延迟初始化
  • GC 需要确定一些堆大小

稳定状态:

  • GC 暂停
  • 应用程序行为,例如缓存条目不时过期
  • 负载变化
  • 由于采用了一些不常见的路径而导致 JIT 去优化/重新编译
  • 热 CPU 节流,尤其是在笔记本电脑上,但不仅限于笔记本电脑

对于服务器应用程序,您应该忽略加速行为并专注于稳定状态。猜测问题可能是什么也无济于事,测量才是王道。

【讨论】:

  • “由于采用了一些不常见的路径而导致的 JIT 去优化/重新编译” - 所有有用的见解,但这一点尤其是最有趣的。我需要阅读更多内容。为了获得稳定/优化的 JVM 环境,我应该使用什么范围的请求来预热应用程序?
  • 正如我所说,尺寸为王。因此,请绘制响应时间图表,看看需要多长时间才能解决问题。
猜你喜欢
  • 1970-01-01
  • 2014-04-21
  • 2019-04-11
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2018-10-21
  • 1970-01-01
相关资源
最近更新 更多