Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

Surveillance et stabilité de IIPImage

De AJLSM
Aller à la navigation Aller à la recherche

Surveillance et stabilité de IIPImage

[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]

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

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.sh

Ce 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.

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>