Why is a setup needed?
When you download a Nuxeo distribution it usually contains default settings so you can start and test the server easily.
These default settings are defined with the following goals:
- make it easy to install and test a Nuxeo server
- provide a simple deployment test environment for developers
This means the default setting are not designed to provide the best performances or the best robustness.
This page gives you directions on the configuration you should do on your server in order to make it ready for production or for load testing.
Configuring persistence
What is the default configuration
The default persistence configuration is lightweight and easy to use, but it is not made for performance and should not be used in production.
- The default Nuxeo 5.1 uses
- HSQL for SQL Data (directories, JBPM, Relations ...)
- FileSystem persistence for Document repository
- The default Nuxeo 5.2 uses
- Derby for SQL Data (directories, JBPM, Relations ...)
- FileSystem persistence for Document repository
- The default Nuxeo 5.3 uses
- H2 for SQL Data (directories, JBPM, Relations ...)
- FileSystem persistence for Document repository
- The default Nuxeo 5.4 and 5.5 uses
- H2 for SQL Data (directories, JBPM, Relations ...)
- Derby for Document repository metadata
- FileSystem persistence for Document repository
Configuring the document storage for production
The repository configuration must be changed according to your specifications :
- the database you want to use
- if you want to externalize blobs on filesystem
For optimal performances use PostgreSQL and externalize the blobs to the filesystem.
See Nuxeo Book section about repository configuration for detailed configuration instructions.
Configuring persistence for other Nuxeo services
Other Nuxeo persistence services include:
- relations and comments (RDF storage)
- workflows (JBPM / Hibernate storage)
- audit (JPA/Hibernate storage)
- placeful configuration (JPA/Hibernate storage)
- SQL Directory (JDBC storage)
- UID generator (JPA/Hibernate storage)
- Indexing storage (Lucene Compass storage)
Nuxeo Book describes the possible configurations.
For optimal performances you should :
- use filesystem persistence for Compass/Lucene
- use your SQL DB for all other services
Configuring Application Server
Tomcat configuration
You should edit the tomcat configuration file in oder to reduce the number of threads.
The file is located at $JBossHome/server/default/deploy/jbossweb-tomcat55.sar/server.xml.
Inside the http connector you should:
- reduce the maxThreads attribute
- make the acceptCount bigger
The maxThreads attribute should be reduced in order to avoid too many context switch during processing a lot of conccurent requests. The optimum setting is between 5 and 10 for a Linux server and could be a little bigger on a MS Windows system.
Configuring JMS
To configure JBoss Messages Queue persistence, see http://www.jboss.org/community/docs/DOC-9342 (ConfigJBossMQPersistence) or http://www.jboss.org/community/docs/DOC-9341 (ConfigJBossMQNullPersistence)
Setting null persistence for JBoss MQ increase application server performance.
Risk is only to loose last untreated transactions just before a server crash. Nuxeo data will stay coherent.
Configuring connection pools
The default Nuxeo connection pools have no specific size configured : the pool have the default size (20). Depending on your usage (number of concurent users) you may have to change this settings.
This is especially true if you do some Load Testing : performances will slow down drastically if the application server is always waiting for available connections.
You should also check your SQL DB settings to be sure that it can handle the needed number of connections.
Defining deployment architecture
Nuxeo supports different kinds of deployements:
- single server
- one stateful server (managing persistence) and N stateless servers (managing presentation and navigation)
- 3 JVM deployment (Core / Indexing / WebPlatform)
- custom deployements for custom projects
Nuxeo includes a packaging system based on Maven that can be used to assemble several EARs according to each project needs.
Configuring the JVM
Your JVM should be able to allocate enough memory.
For a production server or a load testing server between 2 and 4 GB is generally a good setting.
The JVM Parameters are: -Xms2048m -Xmx4096m.
These settings should be added:
- inside the run.conf if you use Linuw/MacOS
- inside the run.bat if you use MS Windows from the command line
- inside the registry if you use MS Windows and the Java service
If you run your tests under MS Windows, you must be aware that the JVM5 can not allocate more that 1,3 GB. This is a knows JVM5/MSWindows limitation. In order to overcome this limitation, you should use the 64Bits versions of your Windows and use the JVM5 64bits.
Under Linux or MacOS there is no such limitation (it may depends on the kernel configuration).