Spring引导启动缓慢的树莓PI

使用Spring Boot 2作为一个IoT应用程序,我注意到Spring的启动时间过于缓慢。 该平台是一个树莓派2B – 当然,这将是比电脑显着慢。 对于正常的代码执行,我测量一个20倍到50倍的差异。

  • 春季开机启动时间在我的电脑(Win10的x64):5秒
  • 在PI(Ubuntu Server,运行jar的docker中的ARM java)上启动Spring启动时间:11分钟

如果我使用我曾经测量过的最高的因子(50x),我预计会看到启动时间少于当前状态的一半。 到目前为止,我尝试过:

  • 从自动配置中排除依赖关系(现在最小,只有spring-boot-starter-web,kotlin,spoow,webflux,reactor和kafka)
  • 在DEBUG上进行日志记录,看看安静时期发生了什么事情(大部分的bean都被设置好了,没有什么可疑的,尽管一些bean需要几秒钟才能加载)
  • ARM上不同的Docker镜像(无效)
  • CPU一直在100%,内存在20%左右,并有足够的磁盘空间

我的初步结论是加载豆吃所有的CPU周期。 我想,初始化一个bean不应该花几秒钟,但它确实。 这里可能是什么瓶颈? 我可以让Spring以任何方式加载更快吗?


这是PC的输出的第一部分:

2018-01-06 13:43:03.462 INFO 9144 --- [ main] cebBasestationApplicationKt : Starting BasestationApplicationKt on GPC with PID 9144 (C:\Data\Code\exmatina\git\basestation\out\production\classes started by Guido in C:\Data\Code\exmatina\git) 2018-01-06 13:43:03.471 INFO 9144 --- [ main] cebBasestationApplicationKt : The following profiles are active: dev 2018-01-06 13:43:03.637 INFO 9144 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@294e5088: startup date [Sat Jan 06 13:43:03 CET 2018]; root of context hierarchy 2018-01-06 13:43:05.578 INFO 9144 --- [ main] org.xnio : XNIO version 3.3.8.Final 2018-01-06 13:43:05.600 INFO 9144 --- [ main] org.xnio.nio : XNIO NIO Implementation Version 3.3.8.Final 2018-01-06 13:43:05.695 WARN 9144 --- [ main] io.undertow.websockets.jsr : UT026009: XNIO worker was not set on WebSocketDeploymentInfo, the default worker will be used 2018-01-06 13:43:05.695 WARN 9144 --- [ main] io.undertow.websockets.jsr : UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used 2018-01-06 13:43:05.721 INFO 9144 --- [ main] io.undertow.servlet : Initializing Spring embedded WebApplicationContext 2018-01-06 13:43:05.722 INFO 9144 --- [ main] osweb.context.ContextLoader : Root WebApplicationContext: initialization completed in 2088 ms 2018-01-06 13:43:05.851 INFO 9144 --- [ main] osbwservlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2018-01-06 13:43:05.857 INFO 9144 --- [ main] osbwservlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2018-01-06 13:43:07.323 INFO 9144 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/],methods=[GET]}" onto public com.exmatina.basestation.model.Message com.exmatina.basestation.BasestationController.home() 2018-01-06 13:43:07.330 INFO 9144 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2018-01-06 13:43:07.349 INFO 9144 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2018-01-06 13:43:07.509 INFO 9144 --- [ main] swsmmaRequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@294e5088: startup date [Sat Jan 06 13:43:03 CET 2018]; root of context hierarchy 2018-01-06 13:43:08.519 INFO 9144 --- [ main] osjeaAnnotationMBeanExporter : Registering beans for JMX exposure on startup 2018-01-06 13:43:08.553 INFO 9144 --- [ main] oscsupport.DefaultLifecycleProcessor : Starting beans in phase 2147483647 2018-01-06 13:43:08.678 INFO 9144 --- [ main] osbweuUndertowServletWebServer : Undertow started on port(s) 11112 (http) 

而从PI的输出:

 2018-01-06 12:48:41.689 INFO 1 --- [ main] cebBasestationApplicationKt : Starting BasestationApplicationKt on ubuntu with PID 1 (/app.jar started by root in /) 2018-01-06 12:48:42.019 INFO 1 --- [ main] cebBasestationApplicationKt : The following profiles are active: prd 2018-01-06 12:48:49.827 INFO 1 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@128c152: startup date [Sat Jan 06 12:48:49 UTC 2018]; root of context hierarchy 2018-01-06 12:54:05.276 INFO 1 --- [ main] org.xnio : XNIO version 3.3.8.Final 2018-01-06 12:54:08.404 INFO 1 --- [ main] org.xnio.nio : XNIO NIO Implementation Version 3.3.8.Final 2018-01-06 12:54:15.847 WARN 1 --- [ main] io.undertow.websockets.jsr : UT026009: XNIO worker was not set on WebSocketDeploymentInfo, the default worker will be used 2018-01-06 12:54:15.852 WARN 1 --- [ main] io.undertow.websockets.jsr : UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used 2018-01-06 12:54:19.930 INFO 1 --- [ main] io.undertow.servlet : Initializing Spring embedded WebApplicationContext 2018-01-06 12:54:19.934 INFO 1 --- [ main] osweb.context.ContextLoader : Root WebApplicationContext: initialization completed in 330155 ms 2018-01-06 12:54:42.544 INFO 1 --- [ main] osbwservlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2018-01-06 12:54:43.206 INFO 1 --- [ main] osbwservlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2018-01-06 12:57:18.683 INFO 1 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/],methods=[GET]}" onto public com.exmatina.basestation.model.Message com.exmatina.basestation.BasestationController.home() 2018-01-06 12:57:19.734 INFO 1 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2018-01-06 12:57:19.758 INFO 1 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2018-01-06 12:57:44.597 INFO 1 --- [ main] swsmmaRequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@128c152: startup date [Sat Jan 06 12:48:49 UTC 2018]; root of context hierarchy 2018-01-06 12:59:36.677 INFO 1 --- [ main] osjeaAnnotationMBeanExporter : Registering beans for JMX exposure on startup 2018-01-06 12:59:37.807 INFO 1 --- [ main] oscsupport.DefaultLifecycleProcessor : Starting beans in phase 2147483647 2018-01-06 12:59:42.664 INFO 1 --- [ main] osbweuUndertowServletWebServer : Undertow started on port(s) 11112 (http)