Hide last authors
H.-Dirk Schmitt 22.1 1 {{box cssClass="floatinginfobox" title="**Contents**"}}
2 {{toc/}}
3 {{/box}}
Silvia Macovei 20.1 4
Niels Mayer 17.1 5 Here are some tips to increase XWiki's performance.
Vincent Massol 10.1 6
Vincent Massol 49.1 7 = Clustering =
8
Vincent Massol 89.1 9 If you need high availability or if the load on your XWiki instance is too high you can [[configure XWiki in a cluster>>Documentation.AdminGuide.Clustering.WebHome]] to spread the load.
Vincent Massol 49.1 10
Vincent Massol 48.1 11 = Standalone Solr =
12
Patrik Mattsson 110.2 13 By default XWiki use an embedded instance of Solr for ease of use, but if you struggle with very slow searches, you should try a external Solr instance.
14 You can use ##debug=true## in the URL of the search to see how much time is spent inside Solr to verify if Solr is taking a long time, or the issue is somewhere else, for example the XWiki UI.
Guillaume Delhumeau 50.1 15
Thomas Mortagne 65.1 16 See [[Performance Guide in Solr module documentation>>extensions:Extension.Solr Search API#HPerformances]].
Thomas Mortagne 64.1 17
Thomas Mortagne 42.1 18 = Slow random number generation on UNIX =
19
Thomas Mortagne 67.1 20 The library used for random number generation in Oracle's JVM relies on ##/dev/random## by default for UNIX platforms.
Thomas Mortagne 42.1 21
Vincent Massol 48.3 22 Although ##/dev/random## is more secure, it's possible to use ##/dev/urandom## if the default JVM configuration instead.
Thomas Mortagne 42.1 23
24 To determine if your operating system exhibits this behavior, try displaying a portion of the file from a shell prompt:
25
Thomas Mortagne 45.1 26 {{code language="bash"}}
Thomas Mortagne 42.1 27 head -n 1 /dev/random
Thomas Mortagne 45.1 28 {{/code}}
Thomas Mortagne 42.1 29
Thomas Mortagne 79.1 30 If the command returns immediately, you can use ##/dev/random## as the default generator for Oracle's JVM. If the command does not return immediately, use on of the following solutions to use ##/dev/urandom##:
Thomas Mortagne 42.1 31
Thomas Mortagne 79.1 32 == JVM setup ==
33
Thomas Mortagne 44.1 34 1. Open the ##$JAVA_HOME/jre/lib/security/java.security## file in a text editor.
35 1. Change the line:
Guillaume Delhumeau 50.1 36 {{code language="properties"}} securerandom.source=file:/dev/random{{/code}}
Thomas Mortagne 42.1 37 to read:
Guillaume Delhumeau 50.1 38 {{code language="properties"}} securerandom.source=file:/dev/urandom{{/code}}
Thomas Mortagne 44.1 39 1. Save your change and exit the text editor.
Thomas Mortagne 42.1 40
Thomas Mortagne 79.1 41 == Command line parameter ==
42
Thomas Mortagne 109.1 43 The same effect can be obtained using ##-Djava.security.egd=file:/dev/./urandom## in the Java command line (usually in the application server configuration).
Thomas Mortagne 79.1 44
Silvia Macovei 20.2 45 = Gzip compression and caching of static pages =
Vincent Massol 14.1 46
Thomas Mortagne 92.1 47 HTTP compression is a capability that can be built into web servers and web clients to improve transfer speed and bandwidth utilization. HTTP data is compressed before it is sent from the server: compliant browsers will announce what methods are supported to the server before downloading the correct format; browsers that do not support compliant compression method will download uncompressed data.
Vincent Massol 14.1 48
Thomas Mortagne 94.1 49 Many application servers (Tomcat, etc.) and HTTP proxies (Apache HTTPd, Nginx, etc.) support it.
Thomas Mortagne 92.1 50
Thomas Mortagne 93.1 51 == In Apache HTTP Server ==
Thomas Mortagne 92.1 52
53 The recommended solution is to set up an Apache Web Server in front of your servlet container and install/configure the following modules:
54
Silvia Macovei 20.1 55 * [[mod-deflate>>http://httpd.apache.org/docs/2.0/mod/mod_deflate.html]]
Pascal Bastien 81.1 56 * [[mod-expires>>http://httpd.apache.org/docs/2.0/mod/mod_expires.html]]
Silvia Macovei 20.1 57 * [[mod-proxy-ajp>>http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html]] (note that this depends on [[mod-proxy>>http://httpd.apache.org/docs/2.2/mod/mod_proxy.html]] that you also need to install)
58
Vincent Massol 14.1 59 Modify your Apache configuration file to load the different modules:
60
Silvia Macovei 20.1 61 {{code language="none"}}
Vincent Massol 14.1 62 LoadModule expires_module /usr/lib/apache2/modules/mod_expires.so
63 LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
64 LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
65 # Depends: proxy
66 LoadModule proxy_ajp_module /usr/lib/apache2/modules/mod_proxy_ajp.so
Silvia Macovei 20.1 67 {{/code}}
Vincent Massol 14.1 68
Kai Sen 37.1 69 //Alternatively you can run the following commands as root (sudo)//
70
71 {{code language="bash"}}
72 a2enmod deflate
73 a2enmod proxy_ajp
74 a2enmod expires
75 {{/code}}
76
Manuel Smeria 32.2 77 and configure your different modules as described below:
Vincent Massol 14.1 78
Thomas Mortagne 92.1 79 === Mod Deflate Configuration ===
Vincent Massol 14.1 80
Silvia Macovei 20.1 81 {{code language="none"}}
Vincent Massol 14.1 82 vwwwpro-1:~# cat /etc/apache2/conf.d/deflate
83 <Location />
84 # Insert filter
85 SetOutputFilter DEFLATE
86
87 # Netscape 4.x has some problems...
88 BrowserMatch ^Mozilla/4 gzip-only-text/html
89
90 # Netscape 4.06-4.08 have some more problems
Silvia Macovei 20.1 91 BrowserMatch ^Mozilla/4.0[678] no-gzip
Vincent Massol 14.1 92
93 # MSIE masquerades as Netscape, but it is fine
Silvia Macovei 20.1 94 # BrowserMatch bMSIE !no-gzip !gzip-only-text/html
Vincent Massol 14.1 95
96 # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
97 # the above regex won't work. You can use the following
98 # workaround to get the desired effect:
Silvia Macovei 20.1 99 BrowserMatch bMSI[E] !no-gzip !gzip-only-text/html
Vincent Massol 14.1 100
101 # Don't compress images
Silvia Macovei 20.1 102 SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
Vincent Massol 14.1 103
104 # Make sure proxies don't deliver the wrong content
105 #Header append Vary User-Agent env=!dont-vary
106 </Location>
Silvia Macovei 20.1 107 {{/code}}
Vincent Massol 14.1 108
Kai Sen 37.1 109 //On debian apache2 the config file for deflate is located under /etc/apache2/mods-enabled/deflate.conf//
110
Thomas Mortagne 92.1 111 === Mod Expire Configuration ===
Vincent Massol 14.1 112
Silvia Macovei 20.1 113 {{code language="none"}}
Vincent Massol 14.1 114 vwwwpro-1:~# cat /etc/apache2/conf.d/expires
115 <Location /xwiki/skins/>
116 ExpiresActive on
117 ExpiresDefault "access plus 1 day"
118 </Location>
119
120 <Location /xwiki/bin/skin/>
121 ExpiresActive on
122 ExpiresDefault "access plus 1 day"
123 </Location>
Silvia Macovei 20.1 124 {{/code}}
Vincent Massol 14.1 125
Thomas Mortagne 92.1 126 === Mod Proxy AJP Configuration ===
Vincent Massol 14.1 127
Silvia Macovei 20.1 128 {{code language="none"}}
129 ProxyRequests Off
Vincent Massol 14.1 130 <Proxy *>
131 Order deny,allow
132 Allow from all
133 </Proxy>
134 ProxyPreserveHost On
135 ProxyPass /xwiki ajp://192.168.1.181:8009/xwiki
Silvia Macovei 20.1 136 {{/code}}
Vincent Massol 14.1 137
Silvia Macovei 20.1 138 where ##ajp:~/~/192.168.1.181:8009/xwiki## is the internal address of your Servlet container where XWiki is running.
Vincent Massol 14.1 139
Kai Sen 37.1 140 If you use Tomcat(7) you need to enable the ajp connector in the /etc/tomcat7/server.xml. Comment out the following line with adding {{code}}<!-- -->{{/code}}. //Maybe give a comment why you did it.//
141
142 {{code}}
143 <!-- disable to use ajp connector instead
144 <Connector port="8080" protocol="HTTP/1.1"
145 connectionTimeout="20000"
146 URIEncoding="UTF-8"
147 redirectPort="8443" />
148 -->
149 {{/code}}
150
Thomas Mortagne 39.1 151 Uncomment the following line by removing the {{code}}<!-- -->{{/code}} and add {{code}}URIEncoding="UTF-8"{{/code}} to it.Maybe give a comment too.
Kai Sen 37.1 152
153 {{code}}
154 <!-- Activate ajp connector for apache proxy_ajp -->
155 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
156 {{/code}}
157
Silvia Macovei 20.2 158 = Memory =
Vincent Massol 9.1 159
Vincent Massol 34.1 160 You need to configure your Servlet container so that XWiki has enough memory. You'll need to tune the value to your need. You should check the logs and see if there are any "out of memory" errors. Here are some good default values:
Marc Lijour 36.1 161
Vincent Massol 78.1 162 * For Java 8 (i.e. XWiki >= 8.1). Notice that there's no permgen anymore in Java 8:
Vincent Massol 96.1 163 ** Small and medium installs: A minimum of 1024MB (##-Xmx1024m)##
164 ** Large installs: 2048MB or beyond (##-Xmx2048m).##
Vincent Massol 78.1 165 * For Java 7 (i.e. XWiki < 8.1)
166 ** Small installs: A minimum of 512MB of heap memory and 196MB of permGen (##-Xmx512m -XX:MaxPermSize=196m##)
167 ** Medium installs: 1024MB for the heap and 196MB of permGen (##-Xmx1024m -XX:MaxPermSize=196m##)
168 ** Large installs: 2048MB (or beyond) for the heap and 196MB of permGen (##-Xmx2048m -XX:MaxPermSize=196m##).
Vincent Massol 9.1 169
Vincent Massol 53.3 170 {{info}}
Vincent Massol 53.1 171 You should not increase the memory beyond what you need because increasing it means that there's more Objects in memory at any time and the automatic JVM Garbage Collector has to work harder to clean itself, which can results in performance degradation in XWiki (since a full GC will pause the application for a longer time).
Vincent Massol 53.3 172 {{/info}}
Vincent Massol 53.1 173
Vincent Massol 34.1 174 {{warning}}
Ecaterina Moraru (Valica) 88.4 175 Note that storing attachments with the default (in database) storage mechanism is very memory intensive. See the [[administrators guide to attachments>>Documentation.AdminGuide.Attachments]] for more information about memory cost and the alternative filesystem based attachment store.
Vincent Massol 38.2 176
Thomas Mortagne 82.1 177 Also note that uploading a lot of pages can trigger out of memory (OOM) errors due to scheduled watchlist jobs. For example uploading 1 million pages will trigger OOM errors even when the JVM is configured to run with 2GB of heap space. For such kind of load we recommend to disable (unschedule) the Watchlist jobs (in ##/xwiki/bin/view/Scheduler/##) before uploading the pages. To track the progress on this issue, please see [[XWIKI-10594>>https://jira.xwiki.org/browse/XWIKI-10594]].
Vincent Massol 34.1 178 {{/warning}}
Silvia Macovei 20.1 179
Vincent Massol 76.1 180 {{warning}}
Ecaterina Moraru (Valica) 88.5 181 If you use HSQLDB as the wiki database, be aware that the full content of the database is stored in memory and thus the memory requirements are higher. See [[HSQLDB installation page>>Documentation.AdminGuide.Installation.InstallationWAR.InstallationHSQL.WebHome]] for more details.
Vincent Massol 76.1 182 {{/warning}}
183
Vincent Massol 35.1 184 For your information here are the values used for the xwiki.org site:
185
186 {{code}}
Vincent Massol 106.3 187 CATALINA_OPTS="-server -Xms800m -Xmx1600m -Dfile.encoding=utf-8 -Djava.awt.headless=true -XX:+UseParallelGC -XX:MaxGCPauseMillis=100"
Vincent Massol 35.1 188 {{/code}}
189
Vincent Massol 105.1 190 = Sizing =
191
Vincent Massol 105.2 192 To give you an idea about what you need to run XWiki on, [[XWiki SAS>>https://xwiki.com]] has the following configuration for its cloud instances:
Vincent Massol 105.1 193
Vincent Massol 106.4 194 * 2GB of RAM (See [[XWiki memory needs>>#HMemory]]),
Vincent Massol 106.1 195 * 2 cores(((
196 {{code language="none"}}
197 AMD Opteron(tm) Processor 6386 SE
198 cpu MHz : 2800.000
199 cache size : 2048 KB
Vincent Massol 106.2 200 {{/code}}
Vincent Massol 106.1 201 )))
Vincent Massol 105.1 202 * 16GB disk size by default
203
Silvia Macovei 20.2 204 = Database Indexes =
Vincent Massol 1.1 205
Vincent Massol 90.1 206 Make sure you've set [[Database indexes>>Documentation.AdminGuide.Performances.Database Administration.WebHome]]. This is especially important when you start having lots of documents.
Vincent Massol 1.1 207
Vincent Massol 74.1 208 = Large number of users =
209
210 When you have large number of users it's recommended to turn on implicit All Group, i.e. to consider that all users are members of XWiki.XWikiAllGroup by default in the configuration. This is achieved by editing the ##xwiki.cfg## file and setting:
211
212 {{code language="none"}}
213 xwiki.authentication.group.allgroupimplicit=1
214 {{/code}}
215
Vincent Massol 75.1 216 Then you should remove all the XObjects from the XWikiAllGroup page but you should keep the page since otherwise you won't be able to set permissions for this group. This will prevent XWiki from having to load all that page's XObjects representing the users (thousands of them if you have thousands of users).
Vincent Massol 74.1 217
Vincent Massol 75.2 218 Also make sure that the ##XWikiAllGroup## is listed in the ##xwiki.users.initialGroups## property (it's there by default if you haven't touched that property):
219
220 {{code language="none"}}
221 #-# List of groups that a new user should be added to by default after registering. Comma-separated list of group
222 #-# document names.
223 # xwiki.users.initialGroups=XWiki.XWikiAllGroup
224 {{/code}}
225
Silvia Macovei 20.2 226 = Robots.txt =
Vincent Massol 15.1 227
Vincent Massol 86.6 228 If your wiki is open on the Internet, it'll be crawled by search robots (like GoogleBot, etc). They will call all the URLs and especially the ones that are resource hungry like exports (PDF/RTF). You need to protect against this. To do so configure a ##robots.txt## file and put it in your webserver configuration.
Vincent Massol 15.1 229
Vincent Massol 85.1 230 Some example:
231
Silvia Macovei 20.1 232 {{code language="none"}}
Vincent Massol 15.1 233 User-agent: *
Vincent Massol 86.7 234 # Prevent bots from executing all actions except "view" since:
Vincent Massol 86.1 235 # 1) we don't want bots to execute stuff in the wiki!
Vincent Massol 86.2 236 # 2) we don't want bots to consume CPU and memory
Vincent Massol 86.7 237 # (for example to perform exports)
238 # Note: You may want to allow /download/ if you wish to have
239 # attachments indexed.
Vincent Massol 86.4 240 Disallow: /xwiki/bin/viewattachrev/
241 Disallow: /xwiki/bin/viewrev/
Vincent Massol 86.1 242 Disallow: /xwiki/bin/pdf/
Vincent Massol 86.4 243 Disallow: /xwiki/bin/tex/
Vincent Massol 86.1 244 Disallow: /xwiki/bin/edit/
Vincent Massol 86.4 245 Disallow: /xwiki/bin/create/
Vincent Massol 86.1 246 Disallow: /xwiki/bin/inline/
247 Disallow: /xwiki/bin/preview/
248 Disallow: /xwiki/bin/save/
Vincent Massol 86.4 249 Disallow: /xwiki/bin/saveandcontinue/
250 Disallow: /xwiki/bin/rollback/
251 Disallow: /xwiki/bin/deleteversions/
Vincent Massol 86.1 252 Disallow: /xwiki/bin/cancel/
253 Disallow: /xwiki/bin/delete/
Vincent Massol 86.4 254 Disallow: /xwiki/bin/deletespace/
255 Disallow: /xwiki/bin/undelete/
256 Disallow: /xwiki/bin/reset/
Vincent Massol 86.1 257 Disallow: /xwiki/bin/register/
258 Disallow: /xwiki/bin/propupdate/
259 Disallow: /xwiki/bin/propadd/
Vincent Massol 86.4 260 Disallow: /xwiki/bin/propdisable/
261 Disallow: /xwiki/bin/propenable/
Vincent Massol 86.1 262 Disallow: /xwiki/bin/propdelete/
Vincent Massol 86.4 263 Disallow: /xwiki/bin/objectadd/
Vincent Massol 86.1 264 Disallow: /xwiki/bin/commentadd/
Vincent Massol 86.4 265 Disallow: /xwiki/bin/commentsave/
266 Disallow: /xwiki/bin/objectsync/
Vincent Massol 86.1 267 Disallow: /xwiki/bin/objectremove/
268 Disallow: /xwiki/bin/attach/
269 Disallow: /xwiki/bin/upload/
270 Disallow: /xwiki/bin/download/
Vincent Massol 86.4 271 Disallow: /xwiki/bin/temp/
272 Disallow: /xwiki/bin/downloadrev/
Vincent Massol 86.1 273 Disallow: /xwiki/bin/dot/
Vincent Massol 86.4 274 Disallow: /xwiki/bin/svg/
Vincent Massol 86.1 275 Disallow: /xwiki/bin/delattachment/
276 Disallow: /xwiki/bin/skin/
Vincent Massol 86.4 277 Disallow: /xwiki/bin/jsx/
278 Disallow: /xwiki/bin/ssx/
Vincent Massol 86.1 279 Disallow: /xwiki/bin/login/
Vincent Massol 86.4 280 Disallow: /xwiki/bin/loginsubmit/
Vincent Massol 86.1 281 Disallow: /xwiki/bin/loginerror/
282 Disallow: /xwiki/bin/logout/
Vincent Massol 86.4 283 Disallow: /xwiki/bin/charting/
284 Disallow: /xwiki/bin/lock/
285 Disallow: /xwiki/bin/redirect/
286 Disallow: /xwiki/bin/admin/
H.-Dirk Schmitt 22.1 287 Disallow: /xwiki/bin/export/
Vincent Massol 86.4 288 Disallow: /xwiki/bin/import/
Vincent Massol 86.2 289 Disallow: /xwiki/bin/get/
Vincent Massol 86.4 290 Disallow: /xwiki/bin/distribution/
291 Disallow: /xwiki/bin/imagecaptcha/
292 Disallow: /xwiki/bin/unknown/
Vincent Massol 86.5 293 Disallow: /xwiki/bin/webjars/
Vincent Massol 86.2 294 # Don't index sandbox content since it's sample content
Vincent Massol 86.1 295 Disallow: /xwiki/bin/view/Sandbox/
Vincent Massol 86.2 296 # Don't index Admin space since it contains Admin stuff.
297 # Note that the Admin space is protected by permissions
298 # anyway but this acts as a safety net to not have private
299 # info leaked on the internet ;)
Vincent Massol 86.1 300 Disallow: /xwiki/bin/view/Admin/
Vincent Massol 86.2 301 # Don't index Stats data (just because it's not useful and
302 # those pages are a bit CPU intensive)
Vincent Massol 86.1 303 Disallow: /xwiki/bin/view/Stats/
Vincent Massol 86.2 304 # Don't index Panels data (because we don't want it
305 # indexed on the internet)
Vincent Massol 86.1 306 Disallow: /xwiki/bin/view/Panels/
307 {{/code}}
308
309 Other example:
310
311 {{code}}
312 [...]
Vincent Massol 85.1 313 # It could be also useful to block certain spaces from crawling,
H.-Dirk Schmitt 22.1 314 # especially if this spaces doesn't provide new content
315 Disallow: /xwiki/bin/view/Main/
316 Disallow: /xwiki/bin/view/XWiki/
Vincent Massol 85.1 317 # On the other hand you would like to have your recent (public) changes included
H.-Dirk Schmitt 22.1 318 Allow: /xwiki/bin/view/Main/Dashboard
Silvia Macovei 20.1 319 {{/code}}
Vincent Massol 15.1 320
Manuel Smeria 32.2 321 **Note:**
Kaya Saman 32.1 322
Manuel Smeria 32.2 323 For Tomcat6 the placement of the ##robots.txt## file should be within the //$TOMCAT/webapps/ROOT// folder and should have permission 644 applied.
Kaya Saman 32.1 324
325 {{code}}
326 -rw-r--r-- 1 root www 1478 Jan 8 15:52 robots.txt
327 {{/code}}
328
Manuel Smeria 32.2 329 In order to test if the ##robots.txt## file is either accessable or working as desired use this [[checker>>http://www.frobee.com/robots-txt-check]].
Kaya Saman 32.1 330
Silvia Macovei 20.2 331 = Statistics =
Vincent Massol 1.2 332
Silvia Macovei 20.1 333 {{info}}
334 This is no longer true starting with XE 1.4M2 since statistics are now put on a queue and written in a different thread in the database in one go, thus reducing the overhead to a maximum.
335 {{/info}}
Vincent Massol 15.1 336
Manuel Smeria 32.2 337 The statistics module is off by default since it's quite database intensive. If you don't need it you should turn it off.
Patrik Mattsson 110.3 338 The current recommendation is to use the [[Matomo extension>>Matomo extensiohttps://extensions.xwiki.org/xwiki/bin/view/Extension/Piwiki%20Integrationn]] for statistics instead.
Vincent Massol 1.2 339
Vincent Massol 52.3 340 = Document Cache =
Vincent Massol 1.2 341
Vincent Massol 52.3 342 You can tune the Document cache in the ##xwiki.cfg## configuration file. The value depends on how much memory you have. The higher the better. A good reasonable value is 1000.
Vincent Massol 2.1 343
Silvia Macovei 20.1 344 {{code language="none"}}
Nikolay Kuchumov 19.1 345 xwiki.store.cache.capacity=1000
Silvia Macovei 20.1 346 {{/code}}
Vincent Massol 8.1 347
Vincent Massol 25.1 348 = Cache Macro =
349
Vincent Massol 26.1 350 It's possible to perform selective content caching by using the [[Cache Macro>>extensions:Extension.Cache Macro]].
Vincent Massol 25.1 351
Guillaume Delhumeau 77.1 352 = LESS CSS Performances =
Guillaume Delhumeau 51.1 353
Guillaume Delhumeau 77.1 354 [[LESS>>extensions:Extension.LESS Module]] is a preprocessor used to generate CSS files for skins and skin extensions. See the [[Performances section>>extensions:Extension.LESS Module#HPerformances]] of the LESS module documentation to learn more about how to optimize its cache for performances, and to set the appropriate number of simultaneous compilations your server can handle.
Guillaume Delhumeau 51.1 355
Silvia Macovei 20.2 356 = Rendering cache =
Vincent Massol 2.1 357
Thomas Mortagne 30.1 358 Some pages are complex to render (they may aggregate outside data for example or do complex and slow queries). For theses pages you can use rendering cache.
359
Thomas Mortagne 29.1 360 == Configuration based ==
Vincent Massol 25.1 361
Manuel Smeria 32.2 362 Pages can be cached (i.e. their rendered content cached) to speed up displaying. The configuration is done in ##xwiki.properties## with the following configuration options:
Vincent Massol 25.1 363
364 {{code language="none"}}
365 #-# [Since 2.4M1]
366 #-# Indicate if the rendering cache is enabled.
367 #-# Default value is false.
368 # core.renderingcache.enabled=true
369
370 #-# [Since 2.4M1]
371 #-# A list of Java regex patterns matching full documents reference.
372 # core.renderingcache.documents=wiki:Space\.Page
373 # core.renderingcache.documents=wiki:Space\..*
374
375 #-# [Since 2.4M1]
376 #-# The time (in seconds) after which data should be removed from the cache when not used.
377 #-# Default value is 300 (5 min).
378 # core.renderingcache.duration=300
379
380 #-# [Since 2.4M1]
381 #-# The size of the rendering cache. Not that it's not the number of cached documents but the number of cached results.
382 #-# (For a single document several cache entries are created, because each action, language and request query string
383 #-# produces a unique rendering result)
384 #-# Default value is 100.
385 # core.renderingcache.size=100
386 {{/code}}
387
Thomas Mortagne 31.1 388 You can force a page to refresh using ##refresh=1## in the URL.
Thomas Mortagne 30.1 389
Thomas Mortagne 41.1 390 Since 6.2 it's also possible to programmatically refresh any document cache using ##com.xpn.xwiki.internal.cache.rendering.RenderingCache## component:
Thomas Mortagne 39.1 391
392 {{code language="java"}}
393 @Inject
394 private RenderingCache renderingCache;
395
396 ...
397
398 renderingCache.flushWholeCache();
399 renderingCache.flushCache(new DocumentReference("xwiki", "MySpace", "MyCachedDocument"));
400 {{/code}}
401
Vincent Massol 25.1 402
Silvia Macovei 20.2 403 = Merge the CSS files =
Vincent Massol 11.1 404
Manuel Smeria 32.2 405 In order to reduce the number of requests and files that are downloaded from the browser or client, it could help to merge all XWiki CSS files into a single one. See the [[Merge CSS Script>>extensions:Extension.Merge CSS]].
Vincent Massol 11.1 406
Silvia Macovei 20.2 407 = Set up NginX =
Nikolay Kuchumov 19.2 408
Manuel Smeria 32.2 409 If you experience //__heavy loads__// on your wiki, you could try using NginX.
Nikolay Kuchumov 19.3 410
Marc Lijour 36.1 411 NginX is used to fetch static content: images, javascript, styles, etc, but it can also be used as a reverse-proxy to pass requests down to the web container (e.g. Tomcat on port 8080).
Nikolay Kuchumov 19.2 412
Manuel Smeria 32.2 413 Unlike Apache, which instantiates a new process per every static file, NginX uses the same process to fetch all the static data, and thus gives you extra perfomance "for free".
Nikolay Kuchumov 19.2 414
Vincent Massol 91.1 415 For more info on setting up NginX check [[this guide>>Documentation.AdminGuide.Installation.NginX.WebHome]].
Nikolay Kuchumov 19.2 416
Simon Urli 107.1 417 = Local resource access =
418
Vincent Massol 108.1 419 [[See URL API>>extensions:Extension.URL API#HResourcemodificationdate]].
Simon Urli 107.1 420
Silvia Macovei 20.2 421 = Backlinks =
Sergiu Dumitriu 4.1 422
Silvia Macovei 20.1 423 While a pretty neat feature, keeping track of the backlinks has a medium impact on the document saving time and a minor impact on the document loading time. If you feel that your wiki does not need backlinks, you can safely disable them with the following line in ##xwiki.cfg##:
424
425 {{code language="none"}}
Nikolay Kuchumov 19.1 426 xwiki.backlinks=0
Silvia Macovei 20.1 427 {{/code}}
Sergiu Dumitriu 5.1 428
Silvia Macovei 20.2 429 = Versioning =
Sergiu Dumitriu 5.1 430
Manuel Smeria 32.2 431 One of the key features of any wiki system, versioning greatly affects the database size and the document update time. If you are sure your wiki does not need to keep track of all the changes and you will never need to revert documents to a previous version, then you can add the following line in ##xwiki.cfg##:
Silvia Macovei 20.1 432
433 {{code language="none"}}
Nikolay Kuchumov 19.1 434 xwiki.store.versioning=0
Silvia Macovei 20.1 435 {{/code}}
Sergiu Dumitriu 6.1 436
Vincent Massol 21.1 437 = Custom Mapping =
Sergiu Dumitriu 6.1 438
Manuel Smeria 32.2 439 In some cases you may not want to rely on XWiki's generic database schema for storing XClass data and instead you'd like to provide your own optimized table. For these use cases you can use [[Custom Mapping>>platform:DevGuide.CustomMapping]].
Vincent Massol 21.1 440
Thomas Mortagne 73.1 441 = LDAP =
442
443 == Disable LDAP sub groups search ==
444
445 By default when loading a LDAP group, each member is searched and loaded to figure out if it's a group or not (and then load the sub group members, etc). Since **7.2** If you know there is not sub group in your LDAP groups you can disable it and speed up quite a lot big groups handling using ##xwiki.authentication.ldap.group_sync_resolve_subgroups## property in ##xwiki.cfg## configuration file.
446
Thomas Mortagne 56.1 447 = Performance tree =
448
Thomas Mortagne 57.1 449 Since 7.1 it's possible to directly get a tree of time spent in each step of the request by using [[debug mode>>dev:Community.Debugging#HDebugmode]].
Thomas Mortagne 68.1 450
Vincent Massol 98.2 451 = Navigation Tree =
Vincent Massol 98.1 452
453 The Navigation Panel and other navigation trees can have some small performance issues under very high volumes. Here ares some base measures we did on some developer laptops to give you some ideas of the performance you should expect:
454
455 Measure set 1:
456
Ecaterina Moraru (Valica) 101.1 457 (% width="100%" class="table-bordered" %)
Vincent Massol 101.2 458 |=(% width="20%" %)DB|=(% width="10%" %)Levels|=(% width="10%" %)Spaces|=(% width="10%" %)Pages|=(% width="15%" %)Requests|=Time
Ecaterina Moraru (Valica) 100.1 459 |MySQL|5|6887|4049|31|180ms
460 |HSQLDB|5|6762|4063|27|138ms
461 |MySQL|1|2514|4962|27|331ms
462 |HSQLDB|1|2377|4718|21|**3.15s**
Vincent Massol 98.1 463
464 Measure set 2:
465
Ecaterina Moraru (Valica) 101.1 466 (% width="100%" class="table-bordered" %)
Vincent Massol 101.2 467 |=(% width="20%" %)DB|=(% width="10%" %)Levels|=(% width="10%" %)Spaces|=(% width="10%" %)Pages|=(% width="15%" %)Requests|=Time
Ecaterina Moraru (Valica) 100.1 468 |Oracle|5|6943|4106|20|119ms
469 |Oracle|1|2493|4982|20|153ms
Vincent Massol 98.1 470
471 Measure set 3:
472
Ecaterina Moraru (Valica) 101.1 473 (% width="100%" class="table-bordered" %)
Vincent Massol 101.2 474 |=(% width="20%" %)DB|=(% width="10%" %)Levels|=(% width="10%" %)Spaces|=(% width="10%" %)Pages|=(% width="15%" %)Requests|=Time
Ecaterina Moraru (Valica) 101.1 475 |Oracle|1|2485|4991|20|151ms
476 |PostgreSQL|1|2494|4991|20|125ms
Vincent Massol 98.1 477
Ilie Andriuta 103.1 478 Measure set 4 (XWiki 10.5, Intel i7 CPU, SSD Storage):
Ilie Andriuta 102.1 479
480 (% width="100%" class="table-bordered" %)
481 |=(% width="20%" %)DB|=(% width="10%" %)Levels|=(% width="10%" %)Spaces|=(% width="10%" %)Pages|=(% width="15%" %)Requests|=Time
Ilie Andriuta 104.1 482 |PostgreSQL 10|5|6847|4052|25|74ms
Ilie Andriuta 102.1 483
Thomas Mortagne 68.1 484 = Legacy =
485
Thomas Mortagne 71.1 486 == Monitor plugin ==
Thomas Mortagne 70.1 487
488 More a developer-oriented feature, XWiki can monitor its own code, reporting the time spent for each sub-component activated during a request. While the monitoring code isn't time consuming, it increases the memory consumption a bit, and the create/start/stop/log/destroy calls are spread all around the code, so you will save a lot of method calls by disabling this. You can do that by setting the following line in ##xwiki.cfg##:
489
490 {{code language="properties"}}
491 xwiki.monitor=0
492 {{/code}}
493
Thomas Mortagne 68.1 494 == 1.0 rendering cache using velocity in document content itself ==
495
496 You can add the following to their content to cache them after they are rendered. Note that the document is refreshed whenever the content of the document changes, and the cache takes into account the URL, so it is pretty safe to add a long cache duration for all documents that don't contain scripts gathering data from the wiki. For example to cache the rendered content for 60 seconds you would add:
497
498 {{code language="none"}}
499 $context.setCacheDuration(60)
500 {{/code}}
501
502 Since 1.5M2, you can set the default rendering cache duration for all pages in ##xwiki.cfg##:
503
504 {{code language="none"}}
505 ## cache all rendered documents for one hour
506 xwiki.rendering.defaultCacheDuration=3600
507 {{/code}}
508
509 Setting the default cache duration to a large value, and manually disabling the cache in dynamic pages would really speed up the wiki, since the rendering is one of the most time consuming processes.
Thomas Mortagne 69.1 510
Thomas Mortagne 72.1 511 == Wiki syntax features for XWiki Syntax 1.0 ==
Thomas Mortagne 69.1 512
513 If you're using XWiki Syntax 1.0 and if you don't plan to use all of the markup features, like the strikethrough filter, the automatic http links filter, the SVG, Laszlo or style macros, you can disable them in ##xwiki-core-*.jar/META-INF/services/com.xpn.xwiki.render.*##. The wiki rendering is the most costly operation in the rendering process, so any disabled feature counts.
514
515 Now this will have no effect if you're using another syntax, like XWiki Syntax 2.x.
Vincent Massol 106.2 516 ~{~{/code}}
517 ~)~)~)

Get Connected