我正在做一个项目,我需要所有API调用花费少于1秒的时间,但是我遇到的问题是第一次调用每条路由的速度都慢于随后的路由。
目前,首次拨打/ login的时间为3.6秒,接下来的通话为170毫秒,其他所有路由都相同。
我发现-XX:+TraceClassLoading
在第一次调用时使用了该类,这些类已加载到内存中,这导致了性能问题。
但是,我没有找到一种在启动时加载所有类的简便方法,对于每个新服务,我需要在ApplicationRunner中添加一个热身调用。
是否有人可以自动加载SpringBoot应用程序的类或预热其所有路由的解决方案?
您可以添加更多详细信息吗?您的应用程序实例化了控制程序吗?还是您正在致电其他服务?您如何拨打其他服务的电话?
—
Menios
Spring Boot大量使用类扫描,因此您不需要像台式机应用程序那样“热身”。如此长的初始加载可能是资源搜索的结果-例如页面模板加载。
—
Alex Chernyshev
有点间接的方法:如果您对端点拥有100%的单元测试覆盖率,则可以使用它们。你仍然必须每个端点代码,但你获得的东西
—
Marged
根据您正在执行的项目,可能并不理想,但是可以在加载应用程序时在内部调用端点。
—
omoshiroiii
@omoshiroiii 没问题。我们做到了。在生产中。原因与使用的某些动态库有关
—
尤金
invokedynamic
,我们知道对这些函数的第一次调用的分辨率很慢(我们有成千上万个这样的调用,没有这个第一次调用,它们的累积时间为数十秒)。