SonarJava 6 AST scan performance issue

Performance of the SonarJava scanning of java has increased in time from 2x and 7x. This all started when we upgrade to SonarJava 6 which seems to be related to this known issue. Log in - SonarSource

  • sonarube version = 7.9.2, SonarJava = 6.0.1, gradle 5 and 6, SonarScanner for gradle = 2.8
  • jdk 8 and 11 both had performance degradation. 11 is much worse
  • running sonarqube on project with 90k java lines of code, with one java gradle subproject
  • what did I already try to fix this(nothing made a difference)
    • I tried increasing the java memory -Dorg.gradle.jvmargs="-Xmx3048m -Xms512m"
    • tried including SONAR_SCANNER_OPTS=-Xmx2048m

Below I have the output from the AST scan. jdk 8 went from 42 seconds to 2 minutes, which I could live with. But with jdk 11 it went from 1 minute to 7 minutes. I included the output for each file for jdk 11 to show that it’s going so slow, it outputs the status of a lot more files. For SonarJava 5.14 it goes pretty fast through the files, but with SonarJava 6.0.1 it’s much slower.

jdk 8, SonarJava 5.14

846/846 source files have been analyzed
Java Main Files AST scan (done) | time=42331ms ~ 42 seconds

jdk 8, SonarJava 6.0.1

846/846 source files have been analyzed
Java Main Files AST scan (done) | time=137243ms  ~ 2min

jdk 11, SonarJava 5.14

00:04:59.129  190/859 files analyzed, current file:  ####.java
00:05:07.153  383/859 files analyzed, current file:  ####.java
00:05:17.028  505/859 files analyzed, current file:  ####.java
00:05:29.124  549/859 files analyzed, current file:  ####.java
859/859 source files have been analyzed
Java Main Files AST scan (done) | time=59431ms ~ 1min

jdk 11, SonarJava 6.0.0

00:03:33.297  82/859 files analyzed, current file: ####.java
00:03:41.321  122/859 files analyzed, current file: ####.java
00:03:51.197  168/859 files analyzed, current file: ####.java
00:04:03.294  188/859 files analyzed, current file: #####.java
00:04:11.319  215/859 files analyzed, current file: ####.java
00:04:21.195  233/859 files analyzed, current file: #####.java
00:04:33.292  249/859 files analyzed, current file: ####.java
00:04:41.316  295/859 files analyzed, current file: ####.java
00:04:51.192  354/859 files analyzed, current file: ####.java
00:05:03.289  486/859 files analyzed, current file: ####.java
00:05:11.314  488/859 files analyzed, current file: ####.java
00:05:21.190  488/859 files analyzed, current file: ####.java
00:05:33.287  490/859 files analyzed, current file: ####.java
00:05:41.312  492/859 files analyzed, current file: ####.java
00:05:51.188  496/859 files analyzed, current file: ####.java
00:06:03.286  498/859 files analyzed, current file: ####.java
00:06:11.311  505/859 files analyzed, current file: ####.java
00:06:21.187  506/859 files analyzed, current file: ####.java
00:06:33.284  514/859 files analyzed, current file: ####.java
00:06:41.309  514/859 files analyzed, current file: ####.java
00:06:51.185  516/859 files analyzed, current file: ####.java
00:07:03.282  518/859 files analyzed, current file: ####.java
00:07:11.308  520/859 files analyzed, current file: ####.java
00:07:21.184  528/859 files analyzed, current file: ####.java
00:07:33.281  535/859 files analyzed, current file: ####.java
00:07:41.305  548/859 files analyzed, current file: ####.java
00:07:51.181  549/859 files analyzed, current file: ####.java
00:08:03.279  551/859 files analyzed, current file: ####.java
00:08:11.304  555/859 files analyzed, current file: ####.java
00:08:21.180  558/859 files analyzed, current file: ####.java
00:08:31.688  560/859 files analyzed, current file: ####.java
00:08:41.564  565/859 files analyzed, current file: ####.java
00:08:51.440  608/859 files analyzed, current file: ####.java
00:09:01.317  642/859 files analyzed, current file: ####.java
00:09:11.193  670/859 files analyzed, current file: ####.java
00:09:23.290  690/859 files analyzed, current file: ####.java
00:09:31.315  712/859 files analyzed, current file: ####.java
00:09:41.191  734/859 files analyzed, current file: ####.java
00:09:53.288  767/859 files analyzed, current file: ####.java
00:10:01.313  792/859 files analyzed, current file: ####.java
00:10:11.189  816/859 files analyzed, current file: ####.java
00:10:23.286  854/859 files analyzed, current file: ####.java
00:10:23.286  859/859 source files have been analyzed
859/859 source files have been analyzed
Java Main Files AST scan (done) | time=420176ms  ~ 7min

Hello @pm15borc,

You are correct, your issue is related to MMF-1870.

We are fully aware of it and we are considering solutions to tackle it, thank you for your investigation and for sharing the results, it will help to lead our choices. In addition, I added your post to the ticket to keep track of it, and you can follow the evolution there.

Best,
Quentin

Does that preformance regression also apply to SonarLint (IntelliJ)?

@holger.haag it depends…

  • If you are not using connected mode…
    The version of SonarJava you will use is the one provided by the SonarLint version currently used. Since, even in the most recent version of SonarLint, SonarJava 6 is not used, you will not face performance regression.

  • If you are using connected mode…
    SonarJava version will be same as you have on your server, you can therefore find there if you will face performance issues or not.

Hope this clarifies the situation.

Thanks, Quentin, that answers my question.