我们有40多个春季启动应用程序,当我们尝试并行启动所有这些应用程序时,大约需要9到10分钟。我们注意到在整个持续时间内CPU使用率始终为100%。 在所有应用程序成功启动并在Eureka注册后,CPU使用率恢复正常(启动后平均CPU使用率约为30-40%)。
似乎每个春季启动应用程序至少花费大约15-20秒来启动,我们不满意,因为应用程序开始时相对较小。
我们还禁用了弹簧启动自动配置,以确保只需要匹配"类在春季启动时启动时加载。在此次更改后,我们在启动时仅获得了大约1或2秒的时间。
我们似乎拥有足够的系统资源,其中有8个核心CPU和32 GB的内存。
Spring boot版本是1.3.6.RELEASE。
是否与Spring启动有关?因为即使我们启动单个弹簧启动应用程序,它也会使CPU达到70-80%的使用率。非常感谢您的帮助!
答案 0 :(得分:1)
这更多的是在启动应用程序时执行的bean和自动配置的数量。
对于简单的Web应用程序以及JPA,还有webcontainer
及其thread pools
,DataSources
初始化以及需要初始化的更多支持bean和自动配置。这些都是一些严肃的资源采取行动,它们都在应用程序启动时匆匆忙忙,以便尽快启动应用程序。
鉴于您同时启动了40多个这样的应用程序,服务器将不得不支付其费用。
有一些方法可以改善应用程序启动时间。
spring-boot-starter-web
。其他starter
模块也是如此。Conditional
@ConditionalOnMissingBean
@ConditionalOnProperty
@ConditionalOnClass
@ConditionalOnBean
@ConditionalOnMissingClass
来使用@ConditionalOnExpression
Bean定义。如果你让春天来检查有很多条件的豆子,这可能会适得其反。spring profiles
。如果您不希望特定的一组bean不属于该运行实例,您可以将它们分组到配置文件中并启用它们或禁用它们initial number of threads
。同样适用于Datasources
。仅使用所需数量的活动线程启动池。 @Lazy
注释类或bean来对bean使用延迟初始化。此注释可以是每个bean,也可以是整个@Configuration
。 如果这不能满足您的需求,您可以使用nice
或cputools
等命令来限制每个进程的CPU使用率。
这是围绕cputools的article。