One of the often overlooked steps when installing Alfresco in a production environment is changing settings within the Alfresco configuration in order to improve system performance. This type of configuration is commonly referred to as “Day Zero” configuration. This post will briefly touch on some of the key components of Alfresco day zero configuration and provide links with additional information for performing day zero configuration.
It’s a little-known fact that the Windows and Linux install packages for Alfresco actually tune the system for a development environment with very few users. As you might guess, if the system is not tuned properly after installation, severe performance impacts can be seen in production environments with many users accessing the system. Up until more recent releases of Alfresco, day zero configuration instructions were tucked away in a completely separate document from the Alfresco installation guide. As a result, many clients have run into performance issues when implementing production Alfresco systems because they don’t realize that day zero day configuration is necessary.
More recently, Alfresco has included the day zero configuration guide as part of the online Alfresco One documentation, starting with version 4.2. The guide can be found here http://docs.alfresco.com/4.2/concepts/zeroday-config.html
Key components of day zero configuration are described below:
- Disabling Unused Features – Alfresco comes with a variety of features that are automatically enabled when using the Alfresco installer packages to deploy Alfresco. It’s important to take inventory of these features and decide which are required/not required for your implementation. Unused features can be disabled to free up system resources for other repository components. Some of the features that can be disabled include CIFS, FTP, IMAP, replication, auditing, workflow, cloud synchronization, OpenOffice transformations, and activities feeds.
- JVM Tuning – the entire Alfresco repository runs in a Java virtual machine. It’s important to tune the JVM in order to optimize memory and CPU usage. JVM tuning is a bit of an art and can take some trial and error. It’s best to monitor memory and CPU usage using profiling tools such as JConsole, and then make adjustments as needed. Suggestions for JVM heap size based on total number of concurrent/casual Alfresco users can be found in the day zero config documentation. In addition to heap, it may be beneficial to massage other JVM settings, such as garbage collection settings, new size, etc.
NOTE: Don’t forget that, by default, Solr is deployed on the same JVM as the Alfresco repository and should also be considered when tuning the JVM. Calculations for required Solr heap memory can be found here http://docs.alfresco.com/4.2/concepts/solrnodes-memory.html
- Database Settings – there are a number of database settings that can be modified to help improve the performance of a production Alfresco repository. One of the most critical database settings is the maximum number of connections available in the database connection pool (db.pool.max). By default, this is set to 40, which is too low for a production implementation and should be increased. The database configuration settings can be placed into the alfresco-global.properties file. A full list of the database settings that should be considered can be found here http://docs.alfresco.com/4.2/concepts/db-config-properties.html
Just to wrap things up, the Alfresco installer packages make it very easy to install one or more Alfresco nodes in a very short time. It’s critical, however, to perform the necessary day zero configurations, especially for production systems, in order to avoid performance problems right out of the gate.
Please feel free to add any comments that you may have.