web-dev-qa-db-ja.com

Spring-Bootの起動が遅い

「mvnspring-boot:run」を使用してjhipsterアプリを起動すると、起動に最大60秒かかります...ログの最初の部分は次のとおりです。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building jhipster 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:1.1.9.RELEASE:run (default-cli) @ jhipster >>>
[INFO]
[INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce-versions) @ jhipster ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ jhipster ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO] Copying 22 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ jhipster ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ jhipster ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ jhipster ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] <<< spring-boot-maven-plugin:1.1.9.RELEASE:run (default-cli) @ jhipster <<<
[INFO]
[INFO] --- spring-boot-maven-plugin:1.1.9.RELEASE:run (default-cli) @ jhipster ---
[INFO] Attaching agents: []
Listening for transport dt_socket at address: 5005

->次に、続行する前に約30秒間ハングします:

[INFO] com.mycompany.myapp.Application - Starting Application on MacBook-Pro.local with PID 5130 (/Users/othomas/Developpement/jhipster-1.9.0/target/classes started by othomas in /Users/othomas/Developpement/jhipster-1.9.0)
[DEBUG] com.mycompany.myapp.Application - Running with Spring Boot v1.1.9.RELEASE, Spring v4.0.8.RELEASE
[DEBUG] org.jboss.logging - Logging Provider: org.jboss.logging.Log4jLoggerProvider

.。

古いバージョンのjhipsterジェネレーター(0.17など)を使用したことを覚えています。15〜20秒で起動しました。それは正常ですか、それとも私の側に問題がありますか?どこを探す?

ありがとう、O。

13
user1848637

私自身、起動時間が遅いので、何が原因なのか疑問に思っています。さまざまなことが開始されたことを示すすべてのコンソールメッセージが表示され、アプリが読み込まれたことを示す最後のメッセージの直前にハングします。

最終的に、JDKの一部としてJava VisualVMを使用して、何が起こっているかを確認できることがわかりました。jdkがbinフォルダーにjvisualvm.exeをインストールしている場合。次に、デバッグを選択すると、 Application.Javaとして、Tomcatプロセスがポップアップし、何が起こっているかを追跡できます。

ハングするスレッドダンプをいくつか取得しましたが、SwaggerAPIドキュメントが生成されている場所であるように見えました。もう少し掘り下げて、これはMetricsConfigurationと呼ばれるクラスで構成されます。これは、「fast」と呼ばれるプロファイルで実行する場合は除外されます。

Eclipseで、デバッグ構成を編集して、次のプログラム引数を含めました。

--spring.profiles.active=dev,fast

これにより、起動時間が230秒からわずか25秒に短縮されます。

私はクイックスキャンをしました、そして、速いことはあらゆる種類のものを無効にするようです。それは主に、管理メニューの下にあるもののように見えますが、とにかく開発中におそらく必要ないでしょう。個人的には、開発中に残りのドキュメントを表示できるよりも、高速な起動を希望します。

Swaggerがそのような豚であるということは、結局のところ、それがそのような良い考えであるかどうか疑問に思いました。それはコストの価値がありますか?次に、これを読みます http://Java.dzone.com/articles/swagger-great そして私はそれを完全に削除することを検討しています。これは素晴らしいアイデアですが、ビルドに33 MBを追加するようです+私にとっては、起動時間が非常に遅くなりました。

詳細については、約16のエンティティがあります。小さくはありませんが、大きすぎません。

8
Ben Thurley

サーバーをデバッグモードで実行しておらず、ブレークポイントが設定されていることを確認してください。これにより、アプリケーションの1つの起動時間が3分から22秒に短縮されました。

4
Jannik

ご意見をいただきありがとうございます。調査して、アプリ(Application.Java)にさらにログを追加しました。実際には、問題はデバッグモードに起因するものではなく、アプリケーションはここでハングしません。

最初の大きな「一時停止」は、liquibaseパッケージのスキャンから発生します(Application.JavaのaddLiquibaseScanPackages();: 26秒!私の2回目の一時停止は、まだLiquibaseに関連しています(ログ「Liquibaseの設定」):20秒。その間、LiquibaseのログレベルをDEBUGに設定すると、ロックが設定されてから解放されたことがわかりますが、非常に迅速に実行されます。

本当にわかりません。 SSDを搭載したMacBookProで実行されているh2インメモリデータベースjdk1.7.0_25とMaven3.0.5を使用しています。 「mvnspring-boot:run」で実行したときの完全なログは次のとおりです。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building jhipster 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:1.1.9.RELEASE:run (default-cli) @ jhipster >>>
[INFO]
[INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce-versions) @ jhipster ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ jhipster ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO] Copying 22 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ jhipster ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ jhipster ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ jhipster ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] <<< spring-boot-maven-plugin:1.1.9.RELEASE:run (default-cli) @ jhipster <<<
[INFO]
[INFO] --- spring-boot-maven-plugin:1.1.9.RELEASE:run (default-cli) @ jhipster ---
[INFO] Attaching agents: []
Listening for transport dt_socket at address: 5005
Wed Nov 26 16:32:23 CET 2014 Added log : Application is about to start
Wed Nov 26 16:32:28 CET 2014Added log : Application started, now we set banner to false
Wed Nov 26 16:32:28 CET 2014Added log : About to add Default profile
Wed Nov 26 16:32:28 CET 2014Added log : Default Profile added. Now we scan liquibase packages
Wed Nov 26 16:32:28 CET 2014Added log : Liquibase pakages scanned. Now we run the app
2014-11-26 16:32:54,564 [INFO] com.mycompany.myapp.Application - Starting Application on MacBook-Pro.local with PID 25452 (/Users/othomas/Developpement/jhipster-1.9.0/target/classes started by othomas in /Users/othomas/Developpement/jhipster-1.9.0)
2014-11-26 16:32:54,567 [DEBUG] com.mycompany.myapp.Application - Running with Spring Boot v1.1.9.RELEASE, Spring v4.0.8.RELEASE
2014-11-26 16:32:57,429 [DEBUG] org.jboss.logging - Logging Provider: org.jboss.logging.Log4jLoggerProvider
2014-11-26 16:32:57,559 [DEBUG] com.mycompany.myapp.config.AsyncConfiguration - Creating Async Task Executor
2014-11-26 16:32:58,305 [DEBUG] com.mycompany.myapp.config.MetricsConfiguration - Registering JVM gauges
2014-11-26 16:32:58,379 [INFO] com.mycompany.myapp.config.MetricsConfiguration - Initializing Metrics JMX reporting
2014-11-26 16:32:58,445 [DEBUG] com.mycompany.myapp.config.DatabaseConfiguration - Configuring Datasource
2014-11-26 16:32:59,353 [DEBUG] com.mycompany.myapp.config.DatabaseConfiguration - Configuring Liquibase
2014-11-26 16:33:19,489 [DEBUG] com.mycompany.myapp.config.CacheConfiguration - Starting Ehcache
2014-11-26 16:33:19,491 [DEBUG] com.mycompany.myapp.config.CacheConfiguration - Registering Ehcache Metrics gauges
2014-11-26 16:33:23,419 [DEBUG] com.mycompany.myapp.config.MailConfiguration - Configuring mail server
2014-11-26 16:33:24,559 [INFO] com.mycompany.myapp.config.WebConfigurer - Web application configuration, using profiles: [dev]
2014-11-26 16:33:24,560 [DEBUG] com.mycompany.myapp.config.WebConfigurer - Initializing Metrics registries
2014-11-26 16:33:24,564 [DEBUG] com.mycompany.myapp.config.WebConfigurer - Registering Metrics Filter
2014-11-26 16:33:24,565 [DEBUG] com.mycompany.myapp.config.WebConfigurer - Registering Metrics Servlet
2014-11-26 16:33:24,567 [DEBUG] com.mycompany.myapp.config.WebConfigurer - Registering GZip Filter
2014-11-26 16:33:24,569 [DEBUG] com.mycompany.myapp.config.WebConfigurer - Initialize H2 console
2014-11-26 16:33:24,570 [INFO] com.mycompany.myapp.config.WebConfigurer - Web application fully configured
2014-11-26 16:33:29,753 [INFO] com.mycompany.myapp.Application - Running with Spring profile(s) : [dev]
2014-11-26 16:33:30,012 [INFO] com.mycompany.myapp.config.ThymeleafConfiguration - loading non-reloadable mail messages resources
2014-11-26 16:33:30,896 [DEBUG] com.mycompany.myapp.aop.logging.LoggingAspect - Enter: com.mycompany.myapp.repository.CustomAuditEventRepository.auditEventRepository() with argument[s] = []
2014-11-26 16:33:30,905 [DEBUG] com.mycompany.myapp.aop.logging.LoggingAspect - Exit: com.mycompany.myapp.repository.CustomAuditEventRepository.auditEventRepository() with result = com.mycompany.myapp.repository.CustomAuditEventRepository$1@1edce963
2014-11-26 16:33:37,229 [INFO] com.mycompany.myapp.Application - Started Application in 68.311 seconds (JVM running for 73.972)
Wed Nov 26 16:33:37 CET 2014Added log : App is running

ありがとう、オリヴィエ

0
user1848637

起動中にデバッグする場合を除いて、デバッグポイントを無効にしてアプリケーションを起動することをお勧めします。

0
maya16

これは変です。実際、マシンと特定のセットアップに応じて、5〜15秒で開始する必要があります。ただし、30秒間ハングすることはありません。表示される行は少し新しいものです。これは、devプロファイルを使用するときにアプリケーションをデバッグモードで起動するためです->デバッガーをアタッチできます。デバッガーの接続を待っているようです。自分で見たことがないので、起動時に30秒のタイムアウトでデバッガーを接続するための特定のJVMオプションがあるのではないでしょうか。

0
Julien Dubois