blob: 2216d514444ed9e269f6e2c1cb24f42c17a9c160 [file] [log] [blame]
This guide aims to help James operators refine their James configuration and set up to achieve better performance.
== Database setup
{backend-name}, OpenSearch, RabbitMQ is a large topic in itself that we do not intend to cover here. Yet, here are some
very basic recommendation that are always beneficial to keep in mind.
We recommend:
* Running {backend-name}, OpenSearch on commodity hardware with attached SSD. SAN disks are known to cause performance
issues for these technologies. HDD disks are to be banned for these performance related applications.
* We recommend getting an Object Storage SaaS offering that suites your needs. Most generalist S3 offers will suite
James needs.
* We do provide a guide on xref:[Database benchmarks] that can help identify and fix issues.
== James configuration
=== JMAP protocol
If you are not using JMAP, disabling it will avoid you the cost of populating related projections and thus is recommended.
Within `jmap.properties`:
....
enabled=false
....
We recommend turning on EmailQueryView as it enables resolution of mailbox listing against {backend-name}, thus unlocking massive
stability / performance gains. Within `jmap.properties`:
....
view.email.query.enabled=true
....
=== IMAP / SMTP
We recommend against resolving client connection DNS names. This behaviour can be disabled via a system property within
`jvm.properties`:
....
james.protocols.mdc.hostname=false
....
Concurrent IMAP request count is the critical setting. In `imapServer.xml`:
....
<concurrentRequests>200</concurrentRequests>
<maxQueueSize>4096</maxQueueSize>
....
Other recommendation includes avoiding unecessary work upon IMAP IDLE, not starting dedicated BOSS threads:
....
<ignoreIDLEUponProcessing>false</ignoreIDLEUponProcessing>
<bossWorkerCount>0</bossWorkerCount>
....
=== Other generic recommendations
* Remove unneeded listeners / mailets
* Reduce duplication of Matchers within mailetcontainer.xml
* Limit usage of "DEBUG" loglevel. INFO should be more than decent in most cases.
* While GC tunning is a science in itself, we had good results with G1GC and a low pause time:
....
-Xlog:gc*:file=/root/gc.log -XX:MaxGCPauseMillis=20 -XX:ParallelGCThreads=2
....
* We recommand tunning bach sizes: `batchsizes.properties`. This allows, limiting parallel S3 reads, while loading many
messages concurrently on {backend-name}, and improves IMAP massive operations support.
....
fetch.metadata=200
fetch.headers=30
fetch.body=30
fetch.full=30
copy=8192
move=8192
....