XWiki Instance Sizing

Last modified by Eleni Cojocariu on 2026/08/13 14:20

Reference

An XWiki deployment is sized by matching its usage to a named instance profile, then provisioning the hardware listed for that profile. Sizing is not tuning: JVM options, caching, database indexes and clustering are covered by the Performance page.

Warning

These recommendations are a guideline. The type of content hosted in XWiki, the extensions installed, the number of subwikis and any other customization make the sizing of an instance vary greatly.

Instance Profiles

A profile is determined by three independent dimensions. Evaluate each one and keep the highest of the three profiles.

ProfileTypical deploymentActive usersDocuments, all versionsAverage page views per second
TinyPersonal wiki, proof of concept, small team intranetUp to 25Up to 5,000Up to 0.5
SmallDepartmental wiki, small company intranetUp to 250Up to 100,000Up to 5
MediumCompany-wide wiki, collaborative portalUp to 2,500Up to 1,000,000Up to 25
LargeEnterprise-wide wiki, public-facing knowledge baseUp to 25,000Up to 10,000,000Up to 100
HugeMulti-tenant farm, high-traffic public wikiMore than 25,000More than 10,000,000More than 100
  • Active users are the accounts that log in and interact with XWiki at least once a month. Readers browsing public pages without authenticating count as page views instead.
  • Documents are the pages, blog posts, attachments and other documents stored in the wiki. The "Index" tab of the Page Index gives their current number; including their versions takes a query on the database.
  • Average page views per second are the HTTP requests per second reaching the application server over a representative day, read from the reverse proxy logs or from an APM tool.

An instance with 800 active users (Medium), 60,000 documents (Small) and 8 page views per second (Medium) is therefore sized as a Medium instance.

Sizing Recommendations

The values below are for a single machine hosting both the XWiki application server and the database server. The JVM heap is a subset of that RAM, set explicitly rather than derived from it; the remainder is shared by the operating system, the database engine and the memory the JVM uses outside its heap.

ProfileRAMJVM heap (-Xmx)CPUStorage
Tiny2 GB1 GB2 cores5 GB
Small4 GB2 GB2 cores20 GB
Medium8 GB4 GB4 cores100 GB
Large16 GB8 GB8 cores500 GB
Huge64 GB32 GB24+ cores1 TB+

Do not give the JVM more heap than the profile calls for: a larger heap holds more objects at any time, and the full garbage collections that reclaim them pause the application for longer. An instance running on HSQLDB is the exception, since it keeps the whole database in the heap.

At the Huge scale the architecture is planned against the actual workload and monitored continuously. Such an instance also needs:

  • a cluster of two or three application nodes and a dedicated database server, each application node sized at 32 GB of RAM, 16 GB of JVM heap and 16+ cores;
  • a dedicated reverse proxy, with static-asset caching and HTTP compression enabled.

FAQ

Should I size for future growth?

When an instance is close to the upper boundary of its profile, provision the next profile up, so that growth does not force a disruptive infrastructure change later.

Where is the JVM heap set?

In the startup configuration of the servlet container: for Tomcat, see Java Memory for Tomcat.

Related

Get Connected