Improving performance
The following options are available to help you improve the performance of your SonarQube Server instance.
Increasing the number of Compute Engine workers
The ability to manage Compute Engine performance is available as part of Enterprise Edition and above.
If analyses are taking too long to process, it may be that you need to increase the number of Compute Engine (CE) workers (Administration > Projects > Background Tasks > Number of Workers).
There are two cases to consider:
- Slowness comes from the fact that the queue is often full of pending tasks.
- Individual tasks take a long time to process.
In the first case, increasing the number of workers could help. The second case should be carefully evaluated. In either case, when considering increasing the number of CE workers, two questions should be answered.
- Does my infrastructure allow me to increase the number of workers?
- To what extent should I increase the number of workers? What number should I configure?
Increasing the number of workers will increase the stress on the resources consumed by the CE. Those resources are:
- the DB.
- disk I/O.
- the network.
- heap.
- CPU.
Of those, only the last two are internal to the CE.
If slowness comes from any of the external resources (DB, disk I/O, network), then increasing the number of workers could actually slow the processing of individual reports (think of two people trying to go through a door at the same time). However, if your slow speed is caused by large individual analysis reports hogging the CE worker for extended periods of time, then enabling parallel processing by adding another worker could help. If parallel processing is enabled, you will need to take a look at the internal resources.
CE workers are not CPU-intensive and memory use depends entirely on the project that was analyzed. Some workers need a lot of memory, while others don't. With multiple CE workers, you should increase CE heap size by a multiple of the number of workers. The same logic applies to CPU: if running with one worker consumes up to Y% of CPU, then you should plan for Z workers requiring Y*Z% of CPU.
To accurately diagnose your situation, monitor network latency, the I/O of the SonarQube Server instance, the database CPU, and memory usage to evaluate whether slowness is mainly/mostly/only related to external resources.
If you increase the number of CE for clusters (available in Data Center Edition), CE workers are replicated across each application node. The number of workers is global and cannot be configured at the application node level.
For example, if you set 4 workers in SonarQube Server UI and you have 2 application nodes, you have configured 8 workers total after you finish restarting all the application nodes (4 workers * 2 nodes = 8 workers total). See the Operating DCE cluster page for more information.
Parallel processing of pull request and branch analyses
This feature is available as part of Enterprise Edition and above.
By default, SonarQube Server's Compute Engine (CE) is enabled to perform parallel processing of pull request analyses and branch analyses for each project, thus enabling it to analyze one branch and several pull requests together at any given time.
You have the option to disable this feature if you want the CE to process one analysis at a time for each project, even if there are multiple CE workers available.
To deactivate this option, go to Administration > General Settings > General > Performance and check the Disable running project analysis tasks in parallel option.
Optimizing the loading of analyzers
SonarQube Server optimizes the loading of analyzers by downloading only those required for the detected languages.
For example, if you don't have any COBOL files in your repository, the COBOL analyzer won't be downloaded before analysis, saving network bandwidth, disk space, and time to bootstrap the code scan.
This behavior is enabled by default. To disable it:
- Go to Administration > General Settings > General > Performance.
- Disable the Analyzers loading optimization option.
Related pages
Was this page helpful?