,

Tuning Zimbra

Après des soucis de performances sur des serveurs Zimbra en VM, je me suis dit qu’un petit tuning serveur serait intéressant. J’ai fait un agrégat de plusieurs idées glanées de ci et de là sur le net.
Voici donc les bases du tuning de mes zimbra, sachant que les valeurs sont, pour certaines directives, propres à chaque serveur.

Les premières règles concernent le tuning kernel. Certaines sont déjà expliqués dans le wiki de Zimbra .. d’autres viennent de wiki que j’ai trouvé sur le net. Dans la mesure du possible j’expliquerais ces modifications

Coté sysctl.conf :

net.ipv4.tcp_fin_timeout=15
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
vm.min_free_kbytes=16384
vm.swappiness=5
vm.vfs_cache_pressure=50
vm.min_free_kbytes=16384
vm.dirty_ratio=10
vm.dirty_background_ratio = 5

La swappiness permet de dire au noyau quand il doit commencer à utiliser le swap. Dans notre cas, c’est lorsqu’il reste moins de 5% de mémoire disponible. Dans la plupart des wikis, c’est mis à 0 , perso je ne suis pas fan, je préfère avoir un peu de marge.

Ensuite on s’attaque à Java

zmlocalconfig -e mailboxd_java_heap_memory_percent 20

Il y a aussi le buffer innodb à adapter , dixit le wiki Zimbra => 40% de la RAM

innodb_buffer_pool_size = 3435973840
innodb_max_dirty_pages_pct = 10
innodb_flush_method = O_DIRECT

Perso, j’utilise aussi mysqltuner pour vérifier la conf mysql. Fonction de la vie de votre serveur, certaines variables peuvent demander des ajustement spécifiques

Amavis, par défaut il est lancé avec 10 threads. Cette fois encore, selon la vie de votre serveur et le nombre de comptes, il n’est pas forcément nécessaire d’en avoir autant. Il convient alors de modifier le fichier /opt/zimbra/conf/amavisd.conf.in

$max_servers =  5

En parlant d’Amavis, un autre point qui peut-être bloquant, serait ses accès disques. Pour l’analyse des mails, il créé un fichier temporaire sur disque. Fonction de la technologie disque utilisée, cela peut avoir un impact non négligeable sur la charge du serveur et le ressenti des utilisateurs. Une solutione consiste à utiliser tmpfs pour le disque temporaire d’Amavis.

Il convient pour cela de savoir de combien de place on a besoin. C’est assez simple, il suffit de multiplier le nombre de thread amavis par la taille maximum d’un message.

Par défaut, 10 threads Amavis sont lancés. On peut retrouver l’info dans le fichier de conf d’Amavis => /opt/zimbra/conf/amavisd.conf . Et la taille des message via zmprov gacf zimbraMtaMaxMessageSize

On modifie le fstab pour y rajouter la ligne suivante :

/dev/shm   /opt/zimbra/data/amavisd/tmp   tmpfs defaults,noexec,nodev,nosuid,size=150m,mode=750,uid=502,gid=503 0 0

On arrête Amavsid, on monte le fs et on redémarre Amavis, et c’est gagné.

Quelques références :
https://wiki.zimbra.com/wiki/Performance_Tuning_Guidelines_for_Single-Server_100-500_User_Systems
https://wiki.zimbra.com/wiki/Performance_Tuning_Guidelines_for_Large_Deployments