Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)
Surveillance et stabilité de IIPImage
Surveillance et stabilité de IIPImage
[modifier | modifier le wikicode]Contexte
[modifier | modifier le wikicode]Le 10/06/2026, plusieurs arrêts/redémarrages de lighttpd ont été observés sur eole3.
L'analyse a montré que le processus :
/usr/lib/iipimage-server/iipsrv.fcgi
pouvait consommer plusieurs gigaoctets de mémoire.
Exemple observé :
RSS : 3,2 Go
VSZ : 3,4 Go
Aucune erreur OOM (Out Of Memory) n'a été détectée dans les journaux système, mais la consommation mémoire importante justifie une surveillance.
Activation du journal IIPImage
[modifier | modifier le wikicode]La configuration FastCGI prévoit déjà l'écriture d'un journal :
LOGFILE=/var/log/iipsrv-lighttpd.log
Créer le fichier si nécessaire :
touch /var/log/iipsrv-lighttpd.log
chown www-data:www-data /var/log/iipsrv-lighttpd.log
chmod 0644 /var/log/iipsrv-lighttpd.log
systemctl restart lighttpd
Redémarrage automatique de lighttpd
[modifier | modifier le wikicode]Afin d'améliorer la résilience du service, un redémarrage automatique peut être configuré via systemd.
Créer le fichier :
mkdir -p /etc/systemd/system/lighttpd.service.d
systemctl edit lighttpd
Contenu :
[Service]
Restart=on-failure
RestartSec=10
Appliquer :
systemctl daemon-reload
systemctl restart lighttpd
Vérification :
systemctl show lighttpd -p Restart -p RestartSec
Résultat attendu :
Restart=on-failure
RestartSec=10s
Surveillance mémoire
[modifier | modifier le wikicode]Script de collecte :
cat >/root/surveiller_iipsrv.sh <<'EOF'
#!/bin/bash
date '+%F %T' >> /var/log/iipsrv-memoire.log
ps -o pid,etime,%cpu,%mem,rss,vsz,cmd -C iipsrv.fcgi -C lighttpd >> /var/log/iipsrv-memoire.log
echo "---" >> /var/log/iipsrv-memoire.log
EOF
chmod +x /root/surveiller_iipsrv.sh
Exécution automatique toutes les 5 minutes :
crontab -e
Ajouter :
*/5 * * * * /root/surveiller_iipsrv.sh
Analyse en cas d'incident
[modifier | modifier le wikicode]Historique du service :
journalctl -u lighttpd --since "today"
Suivi en temps réel :
journalctl -u lighttpd -f
Journal IIPImage :
tail -f /var/log/iipsrv-lighttpd.log
Journal d'erreurs lighttpd :
tail -f /var/log/lighttpd/error.log
Historique mémoire :
tail -100 /var/log/iipsrv-memoire.log
Points à surveiller
[modifier | modifier le wikicode]Les symptômes suivants peuvent indiquer un problème de gestion mémoire dans IIPImage :
- augmentation progressive de la mémoire RSS de iipsrv.fcgi;
- dépassement de plusieurs gigaoctets de mémoire consommée ;
- redémarrages répétés de lighttpd ;
- erreurs FastCGI dans les journaux ;
- dégradation des performances lors de traitements IIIF importants.
À ce stade, aucune réduction des paramètres de cache n'a été appliquée afin de ne pas dégrader les performances du service de diffusion d'images. La surveillance a été privilégiée afin d'obtenir davantage d'éléments avant toute modification des paramètres de cache.
Mesures complémentaires mises en place le 11/06/2026 pour la stabilisation d'IIPImage
[modifier | modifier le wikicode]Contexte
[modifier | modifier le wikicode]Malgré les optimisations réalisées précédemment sur IIPImage et Lighttpd, plusieurs incidents ont continué à être observés :
- consommation mémoire importante du processus iipsrv.fcgi ;
- croissance rapide du cache interne ;
- erreurs de type :
corrupted size vs. prev_size
- plantages entraînant un redémarrage du service Lighttpd.
L'analyse des journaux a montré que les requêtes concernaient principalement les fonds :
ETAT_CIVIL
SERIE_FI
RECENSEMENT
SERIE_P
SERIE_Q
ainsi que quelques fonds isolés de la série R et des données APBP.
Mise en place d'un watchdog mémoire automatique
[modifier | modifier le wikicode]Afin d'éviter qu'un processus IIPImage défectueux ne consomme toute la mémoire du serveur, un script de surveillance a été mis en place.
Le principe est :
- calculer la mémoire RSS totale consommée par les processus iipsrv.fcgi ;
- comparer cette valeur à un seuil ;
- redémarrer automatiquement Lighttpd lorsque le seuil est dépassé.
Script de surveillance
[modifier | modifier le wikicode]Fichier :
/root/watch_iipsrv_memory.sh
Contenu :
#!/bin/bash
LIMIT_KB=$((4*1024*1024))
RSS=$(ps -C iipsrv.fcgi -o rss= | awk '{s+=$1} END{print s+0}')
if [ "$RSS" -gt "$LIMIT_KB" ]; then
echo "$(date '+%F %T') RSS=${RSS}KB > ${LIMIT_KB}KB, restart lighttpd" >> /var/log/iipsrv-watchdog.log
systemctl restart lighttpd
fi
Droits :
chmod +x /root/watch_iipsrv_memory.sh
Seuil retenu
[modifier | modifier le wikicode]Le seuil a été fixé à :
4 Go
soit :
4 194 304 Ko
Ce seuil permet :
- de laisser fonctionner normalement le cache IIPImage ;
- d'intervenir avant qu'une fuite mémoire importante ne mette le serveur en difficulté ;
- de limiter les risques d'OOM Killer.
Exécution automatique
[modifier | modifier le wikicode]Ajout dans la crontab root :
* * * * * /root/watch_iipsrv_memory.sh
La vérification est donc effectuée :
toutes les minutes
Conservation du mécanisme de collecte historique
[modifier | modifier le wikicode]Le script de collecte existant est conservé.
Crontab :
*/5 * * * * /root/surveiller_iipsrv.shCe script n'effectue aucune action corrective.
Il sert uniquement à :
- conserver un historique ;
- suivre l'évolution de la mémoire ;
- faciliter les analyses postérieures à un incident.
Amélioration du script de collecte
[modifier | modifier le wikicode]Le script de collecte a été modifié afin de capturer systématiquement les processus Lighttpd et IIPImage ainsi que l'état global de la mémoire.
Exemple de contenu :
#!/bin/bash
echo "===== $(date '+%F %T') =====" >> /var/log/iipsrv-memoire.log
ps auxww | egrep 'lighttpd|iipsrv.fcgi' | grep -v grep >> /var/log/iipsrv-memoire.log
echo "--- MEMOIRE ---" >> /var/log/iipsrv-memoire.log
free -h >> /var/log/iipsrv-memoire.log
echo >> /var/log/iipsrv-memoire.log
Vérification de la configuration systemd
[modifier | modifier le wikicode]La configuration systemd du service Lighttpd a été vérifiée.
Résultat :
Restart=always
KillMode=control-group
SendSIGKILL=yes
Ces paramètres garantissent qu'en cas de redémarrage :
- tous les processus FastCGI associés sont arrêtés ;
- aucun processus iipsrv.fcgi orphelin ne subsiste ;
- la mémoire est effectivement libérée.
Réduction préventive des caches IIPImage
[modifier | modifier le wikicode]Les valeurs observées montrent que le cache interne d'IIPImage peut dépasser largement 1 Go.
Exemple observé :
TileManager :: Cache Size: 12669 tiles, 1448.74 MB
Afin de limiter la croissance mémoire, il est recommandé de réduire les paramètres suivants dans :
/etc/lighttpd/conf-enabled/20-iipsrv.conf
Valeurs actuelles :
MAX_IMAGE_CACHE_SIZE=5000
MAX_CVT=50000
Valeurs recommandées :
MAX_IMAGE_CACHE_SIZE=500
MAX_CVT=5000
Un redémarrage de Lighttpd est nécessaire après modification.
Objectif
[modifier | modifier le wikicode]Ces mesures ont pour objectif :
- de maintenir le service accessible malgré un éventuel défaut d'IIPImage ;
- de collecter davantage d'informations de diagnostic ;
- de limiter l'impact d'une fuite mémoire ;
- d'éviter les interruptions prolongées du portail d'archives.
</syntaxhighlight>