Blog

gradle が遅いなと思ったら gradle-profiler を使おう

https://github.com/gradle/gradle-profiler

gradle の処理がなんだか遅いなってときがある。

サッとググッて出てくる情報だと、--profile つけろとか、--scan 使えとか書いてある。 --profile は情報がざっくりしすぎていてよくわからないし、--scan は gradle.org に情報がアップロードされちゃうのがちょっと。。 --profile って結局は、「どのタスクが遅いか」はわかるんだけど、どのプラグインが遅いか、とかはよくわからなかったりするんだよね。

gradle-profiler を使うと、どのプラグインが時間食ってるか、みたいなことをサッとしれて便利。 何回か動かしたベンチマークの結果をレポートにまとめてくれるので、gradle の速度チューニングした結果の評価にも便利。

benchmark の取り方

$ gradle-profiler --benchmark --project-dir . assemble

とかやって動かす。

数回試行された結果が以下のような HTML で生成される。

profiling の仕方

jfr や async-profiler をかけながらgradleを動かせるのも便利すぎる。

なんだか最近gradle遅いな、と思ったらgradle-profilerかけると良いと思う。

gradle-profiler --profile async-profiler --project-dir . assemble

async-profiler 以外にも jfr や YouProfiler などを使うことも可能。

以下のような見慣れた flamegraph を得ることができる。

これをやった結果、spring の dependencyManagement に個別の dependency をいっぱい指定すると遅いから platform project 作ったほうが良さそうだなぁ、とかそういうことがわかったりする。