Performance test on Jetty/HSQLDB with a single wiki between 16.10.16 and 17.10.2

Last modified by Ilie Andriuta on 2026/01/27 14:39

Environment

  • Windows 11 64bit version 25H2
  • Quad core i7-9750H
  • Oracle JDK 21.0.9 (build 21.0.9+7-LTS-338)
  • Dumbbench 0.505
  • VisualVM 2.2
  • permdir in a SSD
  • standard Jetty/HSQLDB package
  • only main wiki
  • configuration:
    • Admin user:
      • hidden documents enabled
  • import perf.xar

Most of response time statistics are made with Dumbbench, you can install it using cpan.
For example on Debian/Ubuntu:

$ sudo apt-get install cpanminus
$ sudo cpanm Module::Install
$ sudo cpanm Dumbbench

On Windows 11:

  1. Install perl from https://strawberryperl.com/
  2. Go to Windows Terminal and install Dumbbench:
    PS C:\> perl
    PS C:\> cpanm Dumbbench
  3. (If needed) Download wget.exe (64 bit) from https://eternallybored.org/misc/wget/

    Make a folder for testing the instances and put wget.exe there.

Unless specifically indicated otherwise all the tests are executed with a fully initialized instance (core extensions don't run anymore, SOLR index is fully up to date, etc.) and logged in with Admin user. Basically except for a few special tests we are using an instance that already been started and run until the proc is flat for some time.

Login with Admin user (using port 1115):

.\wget.exe --save-cookies cookies.txt --post-data 'j_username=Admin&j_password=admin&j_rememberme=true' "http://127.0.0.1:1115/xwiki/bin/loginsubmit/XWiki/XWikiLogin?j_username=Admin&j_password=admin&j_rememberme=true"

Tests

Summary

"similar": difference is lower than 10%
"slightly": difference is lower than 20%

Information

Note that most of the speed related values are an average of very fast moving results, a lot of things are happening during a HTTP request and it's far from stable duration (that's why 10% may sounds a lot for something called "similar" but the variable can go up and down around 5% sometimes so 10% average is really not that much of a clear win). Dumbbench based tests are executed several times and the lowest result is selected.

Speed

ActionsDifference
Jetty startupsimilar
First accessnot existing page without UIsimilar
not existing page with UIsimilar
Reloadnot existing page without UI+25.77% faster
not existing page with UI+30.62% faster
empty page without UIsimilar
empty page with UI+37.15% faster
Main.WebHome without UIsimilar
Main.WebHome with UI+40.75% faster
SOLRFull SOLR reindex+33.33% faster
SOLR sync when index is empty- 80.13% slower 1
SOLR sync when there is nothing to do- 50.59% slower 1
Result of search finding lots of results+34.37% faster
Result of search finding one result+39.70% faster
RenderingPage with 1000 macros without UIsimilar
Page with 1000 html macros without UIsimilar
Wiki creationFrom flavorsimilar
From templatesimilar

Memory

ActionsDifference
Heap Memory after jetty startup+5 MB
Heap Memory after full SOLR index+14 MB

1 For the SOLR Sync tests lower times was reported https://jira.xwiki.org/browse/XWIKI-23920, but according to some tests made on other workstation, the time were much better than the ones obtained here.

Jetty startup

Unit: milliseconds

This information is obtained from the log with the line looking like 2026-01-15 14:53:57.343:INFO :oejs.Server:main: Started oejs.Server@74a6f9c1{STARTING}[12.1.5,sto=0] @31804ms.

  • 16.10.16: 28731
  • 17.10.2: 31804

First access

First HTTP request after restarting Jetty.

First access to not existing page without UI

(/xwiki/bin/get/NoSpace/NoPage)

Unit: milliseconds

Firefox network statistics to load the root resource (image/js/css/etc. resources are not taken into account).

  • 16.10.16: 36341
  • 17.10.2: 37474

First access to not existing page with UI

(/xwiki/bin/view/NoSpace/NoPage)

Unit: seconds

Done by hand with a chronometer (image/js/css/etc. resources are not taken into account).

  • 16.10.16: 45
  • 17.10.2: 43

Reload

XWiki is doing nothing on background and everything is both in server and client cache already. Values are calculated using dumbbench (image/js/css/etc. resources are not taken into account).

Reload of not existing page without UI

dumbbench --float -p 0.1 -i 100 -- wget -q -o NUL -O NUL --load-cookies cookies.txt "http://127.0.0.1:1115/xwiki/bin/get/NoSpace/NoPage"

Unit: milliseconds

  • 16.10.16: 208
  • 17.10.2: 154

Reload of not existing page with UI

dumbbench --float -p 0.1 -i 100 -- wget -q -o NUL -O NUL --load-cookies cookies.txt "http://127.0.0.1:1115/xwiki/bin/view/NoSpace/NoPage"

Unit: milliseconds

  • 16.10.16: 219
  • 17.10.2: 152

Reload of empty page without UI

dumbbench --float -p 0.1 -i 100 -- wget -q -o NUL -O NUL --load-cookies cookies.txt "http://127.0.0.1:1115/xwiki/bin/get/EmptySpace/EmptyPage"

Unit: milliseconds

  • 16.10.16: 17
  • 17.10.2: 18

Reload of empty page with UI

dumbbench --float -p 0.1 -i 100 -- wget -q -o NUL -O NUL --load-cookies cookies.txt "http://127.0.0.1:1115/xwiki/bin/view/EmptySpace/EmptyPage"

Unit: milliseconds

  • 16.10.16: 270
  • 17.10.2: 170

Reload of Main.WebHome without UI

dumbbench --float -p 0.1 -i 100 -- wget -q -o NUL -O NUL --load-cookies cookies.txt "http://127.0.0.1:1115/xwiki/bin/get/Main/WebHome"

Unit: milliseconds

  • 16.10.16: 24
  • 17.10.2: 23

Reload of Main.WebHome with UI

dumbbench --float -p 0.1 -i 100 -- wget -q -o NUL -O NUL --load-cookies cookies.txt "http://127.0.0.1:1115/xwiki/bin/view/Main/WebHome"

Unit: milliseconds

  • 16.10.16: 285
  • 17.10.2: 169

SOLR

Full SOLR reindex

Unit: seconds

Note: On XWiki versions > XWiki 17.8.0+, delete the data\cache\solr\search_9 folder, restart, load home page and after INFO o.x.s.s.i.j.IndexerJob - Finished job of type [solr.indexer] with identifier [[solr, indexer]] log, take the last elapsedTime from <permdir>/data/jobs/status/3/solr/indexer/status.xml from status.xml.zip.

  • 16.10.16: 54
  • 17.10.2: 36

SOLR sync

Only the thread determining what need to be indexed and not the actual indexing.

Note: On XWiki versions > XWiki 17.8.0+, calculate the elapsed time from the beginning of the Indexing job until the synchronization is done (after the log INFO o.x.s.s.i.j.IndexerJob - {} documents added, {} deleted and {} updated during the synchronization of the Solr index.

The timestamps are found in <permdir>/data/jobs/status/3/solr/indexer/log.xml.

when index is empty

Unit: milliseconds

  • 16.10.16: 1509 (1.51 s)
  • 17.10.2: 2728 (2.72 s)

Test results for XWiki 17.10.2:

Test 1: 2961 (2.96 s)
Test 2: 2728 (2.72 s)
Test 3: 2824 (2.82 s)
Test 4: 2737 (2.73 s)
Test 5: 2790 (2.79 s)

when there is nothing to do

Unit: milliseconds

  • 16.10.16: 502 ms
  • 17.10.2: 756 ms

Test results for XWiki 17.10.2:

Test 1: 756 ms
Test 2: 795 ms
Test 3: 840 ms
Test 4: 787 ms
Test 5: 820 ms

Search

XWiki is doing nothing on background and everything is both in server and client cache already. Values are calculated using dumbbench (image/js/css/etc. resources are not taken into account).

Unit: milliseconds

Result of search finding lots of results

Login with Admin user and make sure hidden document display is enabled.

dumbbench --float -p 0.1 -i 100 -- wget -q -o NUL -O NUL --load-cookies cookies.txt """http://127.0.0.1:1115/xwiki/bin/view/Main/Search?sort=score&sortOrder=desc&r=1&f_type=DOCUMENT&text=*"""
  • 16.10.16: 448
  • 17.10.2: 294

Result of search finding one result

dumbbench --float -p 0.1 -i 100 -- wget -q -o NUL -O NUL --load-cookies cookies.txt """http://127.0.0.1:1115/xwiki/bin/view/Main/Search?sort=score&sortOrder=desc&r=1&f_type=DOCUMENT&text=name%3A1000Macros"""
  • 16.10.16: 336
  • 17.10.2: 203

Rendering

Page with 1000 macros without UI

dumbbench --float -p 0.1 -i 100 -- wget -q -o NUL -O NUL --load-cookies cookies.txt "http://127.0.0.1:1115/xwiki/bin/get/Test/1000Macros"

Unit: milliseconds

  • 16.10.16: 26
  • 17.10.2: 28

Page with 1000 html macros without UI

dumbbench --float -p 0.1 -i 100 -- wget -q -o NUL -O NUL --load-cookies cookies.txt "http://127.0.0.1:1115/xwiki/bin/get/Test/1000HTMLMacros"

Unit: milliseconds

  • 16.10.16: 460
  • 17.10.2: 428

Wiki creation

Unit: nanoseconds

From flavor

Create the wiki test1 from default flavor and get the time spent from the job (</rootStep> in <permdir>/jobs/status/wikicreation/createandinstall/test1/status.xml).

  • 16.10.16: 60324437600 (60 s)
  • 17.10.2: 60419739900 (60 s)

From template

Make test1 a template wiki.

Create the wiki test2 from wiki test1 and get the time spend from the job (</rootStep> in <permdir>/jobs/status/wikicreation/createandinstall/test2/status.xml).

  • 16.10.16: 48008664300 (48 s)
  • 17.10.2: 48373255500 (48 s)

Heap Memory

Attach VisualVM to get the information.

Unit: MB

Heap Memory after jetty startup

Start jetty and wait until Java is not doing anything on both (wait for potential initialization of various stuff like core extension cache, etc). Force garbage collector before looking at "used".

  • 16.10.16: 124 used, 273 allocated
  • 17.10.2: 129 used, 250 allocated

Heap Memory after full SOLR index

Delete the data/solr folder, restart, load home page then wait until nothing is happening in background. Force garbage collector before looking at "used".

Unit: MB

  • 16.10.16: 312 used, 1059 allocated
  • 17.10.2: 326 used, 1073 allocated

Get Connected