Comment optimiser les performances globales du système

Détails des articles
Lien: https://support.icewarp.fr/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=322
Code d'identification de l'article: 322
Créé le: 02 Dec 2011 05:49 PM

Réponse IceWarp v12 et suivantes -

Voici un certain nombre d'indications de configuration recommandées ou exigées (indication explicite) afin d'optimiser les performance globales du système.
Ces recommandations doivent s'appliquer en particulier lorsque des lenteurs sont constatées lors des accès distants par le Client Web par exemple.

   
Exigences matérielles
Voici les configurations préconisées en fonction du nombre d'utilisateurs  (taille de la place sur le disque dur, fréquence CPU, taille de la RAM et autres contraintes) :   
Si le système est très chargé, la mémoire RAM doit être encore augmentée.

Systèmes d'exploitation
Microsoft Windows Server 2008 et plus récents ou RedHat Linux Enterprise
Le serveur peut être une machine virtuelle  (avec VMWare ESXi ou HyperV)

Configuration
Si votre machine est multi processeurs, n'oubliez pas de cocher la case correspondante dans Système -> Avancé -> onglet Protocole -> "Utilisation multi-processeurs"

Disques durs
Pour l'optimisation de l'accès aux disques durs, Il est préférable de mettre les dossiers mail et archives sur des disques différents, soit idéalement : le serveur icewarp avec les dossiers temp et logs sur un disque, le dossier mail sur un autre disque et archive sur encore un autre disque.

Allocation mémoire
A partir de la version 11.4.5 une nouvelle librairie de gestion de la mémoire a été ajoutée. Mais elle n'est pas utilisée par défaut.

Pour l'utiliser, il faut recopier la librairie dans le répertoire principal d'IceWarp
- copier ...\IceWarp\lib\win64\libtcmalloc_minimal_64.dll dans ...\IceWarp
- redémarrer tous les services

Cette librairie n'est efficace que pour les processeurs multi-cœurs


Bases de données
A partir de 100 comptes, il ne faut pas laisser les bases de données sous SQLite : choisir MySQL ou MS SQL
Mettre aussi les comptes en base de données, ce qui conduit à définir 6 bases de données : pour les comptes, l'anti-spam, le GroupWare et les 3 caches : répertoire, ActiveSync, Rapports de spam.

On peut garder le défaut (SQLite) pour le cache WebClient : dans le champ "Paramètres BD" du menu GroupWare -> WebClient : "sqlite:%WMUSERPATH%cache.db"

Pour optimiser la base MySQL, voir la FAQ correspondante.

Dans le paramétrage de chaque base dans IceWarp, utiliser la connexion directe (avec libMySQL.dll) pour My SQL et ODBC pour MS SQL.

Variables API
Depuis la console, aller dans le menu Fichier -> Console API.
Entrer la variable (ou une partie de la variable) dans le champ Filtre
Sélectionner la valeur affichée et double cliquer pour la modifier.
La prise en compte de la modification nécessite un redémarrage des services

A partir du moment où des bases MySQL ou MSSQL sont utilisées, il peut être intéressant de modifier la variable suivante :
c_system_server_useraccessdontusetransactions
et la passer de faux (mode par défaut) à vrai.
Lorsque la variable est à faux (le mode transaction est utilisé) sur un système chargé, on peut avoir des erreurs de ce type :
"...
DB lib Error executing query: Lock wait timeout exceeded; try restarting transaction, SQL: UPDATE UserAccess SET UA_LastReceived..."
qui doivent alerter sur le besoin de modifier cette variable.

accounts.global.accounts.accountcache = 256 // nombre de caches pour les comptes (128 par défaut) (cette variable n'existe plus depuis 12.3)
accounts.global.distributed.accounts.cacheexpire = 3600 // durée d’expiration du cache des comptes en secondes (300 par défaut)
system.storage.accounts.odbcmultithread = true // utilisation du multithread pour les comptes (faux par défaut)
c_system_tools_wcstatistics_enabled = faux // ne pas utiliser la télémétrie WCS
A partir de la v12.0, il vaut mieux conserver le cache compte et donc conserver la valeur par défaut de cette variable :
c_accounts_global_accounts_disablecache = faux // cache pour les comptes

Journaux
Dans Système -> Journaux, ne pas activer l'envoi vers syslog (sauf besoin incontournable)
Dans Système -> Journaux -> Debug, ne rien activer, sauf suite à une demande de support IceWarp
Dans Système -> Services, il faut généralement conserver des journaux détaillés pour SMTP et Anti-Spam
Il est préférable de configurer le fractionnement des journaux (Système -> Journaux -> onglet Général -> Rotation des journaux ...) en mettant une valeur de quelques méga octets (50 par exemple)

Le Client Web
Voir cette FAQ qui donne quelques recommandations

Serveur Web
Il est impératif d'utiliser le mode FastCGI
Voici la procédure pour passer en mode FastCgi (c'est le mode implicite pour les installations)
- Aller sur la fenêtre de l'onglet Scripting du site Web par défaut (Menu Web)
- Sélectionner successivement toutes les lignes dont l'application est php\php.dll
- Cliquer sur "Modifier"
- Changer l'application en "(fastcgi);php\php.exe"
- Redémarrer le service Web (Système -> Services -> onglet Général -> Web -> clic droit ->  "Redémarrer le module Contrôle")
NB : il ne faut pas toucher à l'application modules\wcs.dll

Fichier webserver.dat
Les paramètres contenues dans le fichier config\webserver.dat, doivent être modifiées directement dans ce fichier. Voici les valeurs conseillées pour FCGI :

<FCGI_TIMEOUT>150000</FCGI_TIMEOUT>
<FCGI_THREADPOOL>30</FCGI_THREADPOOL>
<FCGI_INITSERVERS>8</FCGI_INITSERVERS>
<FCGI_MAXSERVERS>0</FCGI_MAXSERVERS>
<FCGI_MAXROUNDS>10000</FCGI_MAXROUNDS>
<FCGI_BINDIP>127.0.0.1</FCGI_BINDIP>
<FCGI_RESTART500>3</FCGI_RESTART500>
<FCGI_CHECKRUNNING>1</FCGI_CHECKRUNNING>
<FCGI_THREADPOOLTIMEOUT>300000</FCGI_THREADPOOLTIMEOUT>
<FCGI_ENVIRONMENT>PHP_FCGI_MAX_REQUESTS=20000</FCGI_ENVIRONMENT>

<FCGI_THREADPOOL> peut être monté jusqu'à 100 pour les systèmes qui ont suffisamment de mémoire RAM

Pour Activesync
<MODULES_THREADPOOL>
<MODULE TITLE="[activesync]" THREADPOOL="-1"/>

<MODULE TITLE="[wcs]" THREADPOOL="20"/> 
</MODULES_THREADPOOL>

Variables API
Depuis la console, aller dans le menu Fichier -> Console API.
Entrer la variable (ou une partie de la variable) dans le champ Filtre
Sélectionner la valeur affichée et double cliquer pour la modifier.
La prise en compte de la modification nécessite un redémarrage des services
webservice.appmaxthreads = 0 // nombre maximum de threads (0=illimité par défaut)


Anti-Virus
La mise à jour peut être effectuée une fois par heure, ne pas descendre en dessous.

Exclusions
Pour un système sous Windows, il faut ajouter les exclusions suivantes dans
Windows -> Paramètres -> Mise à jour et sécurité -> Sécurité Windows -> Protection contre les virus et menaces -> Paramètres de protection contre les virus et menaces -> Gérer les paramètres -> Exclusions -> Ajouter ou supprimer les exclusions :
Dossier : ...\mail\_incoming
Dossier : ...\mail\_outgoing
Dossier : ...\logs\
Dossier : ...\temp\
Dossier : ...\IceWarp\
Process : smtp.exe
Process : pop3.exe
Process : cal.exe
Process : control.exe
Process : im.exe
Process : php.exe
Process : savdid.exe
Et ensuite redémarrer tous les services IceWarp

Variables API de l'anti-virus
Depuis la console, aller dans le menu Fichier -> Console API.
Entrer la variable (ou une partie de la variable) dans le champ Filtre
Sélectionner la valeur affichée et double cliquer pour la modifier.
La prise en compte de la modification nécessite un redémarrage des services

av.maxthreads = 0 // nombre maximum de threads (0=illimité par défaut)
av.maxfile = 0 // taille maximum d'un message (1024 par défaut)


Traitement des messages
Option "Traiter les messages entrants dans la file MDA" sous Serveur de messagerie -> service SMTP -> onglet Ditribution : cette option peut être cochée si la charge SMTP est très importante, si la charge prépondérante est côté service Web, il vaut mieux la décocher

Augmenter le nombre de connexions entrantes pour IMAP (Système -> Service -> IMAP -> Propriétés -> Autres) et le mettre à 512 (ou plus) au lieu de 256

Dans Mail -> Sécurité -> onglet DNS, nous considérons que deux sites sont en général suffisants et beaucoup moins pénalisants pour le système. Les deux sites conseillés sont: bl.spamcop.net et zen.spamhaus.org
Si cette option est validée, l'option RBL de Anti-Spam -> SpamAssassin ne doit pas l'être

Réduire le taille de la boîte de réception Inbox
Le contenu du dossier inbox est mis à jour très régulièrement par le système
Si le contenu de cette boîte est important, le temps consommé pour sa mise à jour peut être aussi très important.
Il est donc conseillé de lui garder une taille raisonnable (inférieure à 10000 emails par exemple)

On peut alléger les Inbox les plus volumineuses en déplaçant les anciens mails dans des sous-dossiers.
Il est préférable de le faire sous Windows directement car un mouvement en masse depuis un client standard peut provoquer des ralentissements considérables.
Une technique pour le faire depuis une fenêtre MS-DOS, par exemple :
move c:\mail\domain.com\user1\inbox\2018*.imap c:\mail\domain.com\user1\2018folder
type c:\mail\domain.com\user1\inbox\imapindex.dat | findstr /b "2018" > c:\mail\domain.com\user1\2018folder\imapindex.dat
Il faudra ensuite rafraîchir le cache des comptes qui ont été ainsi traités (dans l'onglet Options du compte de la console)

Déplacement des dossiers mail
Une autre possibilité consiste à déplacer les dossiers mails volumineux vers un autre disque dur, cf. cette FAQ

Optimisation IMAP
Pour les très gros dossiers de messagerie qui ralentissent le fonctionnement du protocole IMAP, il existe une méthode d'optimisation.
Cette méthode est toutefois à utiliser avec précaution et il est conseillé de demander l'avis de votre support avant de la mettre en œuvre.
Elle n'est utilisable qu'à partir de la version 12.1.

Il faut modifier une variable API : C_System_Services_IMAP_IndexStorage
Les valeurs possibles sont :
0 - (valeur par défaut) fonctionnement standard
1 - ce mode optimisé s'applique à tous les comptes
2 - ce mode optimisé s'applique uniquement aux comptes sélectionnés. Ces comptes sont listés par leurs adresses email (une par ligne) dans le fichier imapbinary.dat du dossier config du répertoire principal d'IceWarp

Attention : il est possible de revenir à la méthode traditionnelle d'indexation mais cela fait perdre tous les indicateurs lu/non lu pour ce compte (il faut recréer un fichier imapindex.dat vide)


Fichiers mappés
Il est possible de mapper dans le Client Web des dossiers et des fichiers qui sont sur le serveur local ou un autre serveur
Attention, cette fonction est très consommatrice de ressources surtout si le serveur contenant les dossiers n'est pas local
S'il y a beaucoup de fichiers et si les consultations sont fréquentes, il vaut mieux utiliser un autre moyen d'accès

YODA et l'indexation des emails

Pour des détails sur ce sujet, consultez cette FAQ.


Mesurer les performances du système


Le journal des performances permet de voir quels sont les process qui consomment le plus :
Il faut le valider en donnant une valeur de 8 (à adapter si besoin) secondes dans Système -> Journaux -> onglet Debug
Le journal est consultable dans Etat -> Journaux -> performances

Il est possible de mesurer la performance du lecteur disque qui est souvent un facteur de ralentissement.
Voici le chemin (serveur Windows) pour le définir : Outils d'administration (ou Gestion de l'ordinateur) -> Performances (Performance -> Analyseur de performance) -> Clic droit dans la partie basse du panneau de droite (ou bouton +) -> Ajouter des compteurs -> Sélectionner 'Choisir les compteurs sur' et indiquer la machine -> Sélectionner 'Disque physique' -> Sélectionner 'Long. moy. de file d'attente du disque' -> Sélectionner la partition (C:\, D:\...).
Ce compteur ne doit normalement pas dépasser la valeur de 2.



Modifié le 8 septembre 2020