Je me suis "amusé" à faire du profiling sur les CGIs de Nagios 3.0a1. Pour cela, j'ai utilisé gprof (tutoriel). D'ailleurs cela a été un peu complexe car je n'ai jamais utilisé ce genre d'outil. Dans un premier temps, j'ai eu du mal à avoir un résultat différent de "pas de fichier gmon.out".

J'ai simulé la présence de 900 hosts et de 22800 services. À noter que je n'ai pas fait de choses extraordinaires: pas de dépendances, pas de parentalité, pas de grand nombres de hostgroups différents. Je me suis basé sur mon expérience des éléments supervisés sur les environnements de mes clients pour avoir quelque chose de suffisamment proche de la réalité. J'ai simulé un environnement très peu contraint avec un seul utilisateur et ne faisant qu'une seule requête à la fois. Ce qui est par contre très éloigné de la réalité.

Le temps d'exécution de la CGI Tactical Overview est de 7s. Le temps d'exécution est le même pour les CGI suivantes: TOUTES! Et oui, toutes (ou presque: la statusmap met elle 25 secondes) les CGIs mettent à peu de choses près le même temps pour s'exécuter. En fait, cela vient de l'origine du ralentissement. En effet, Gprof me dit que les trois fonctions qui ralentissent mes CGIs sont xsddefault_read_status_data et xodtemplate_add_object_property et strip. Les deux premières fonctions sont utilisées pour lire le fichier de statut et la configuration. C'est là que se trouve le point de ralentissement qu'il faut supprimer.

La fonction strip est utilisée pour supprimer les caractères "blancs" (espaces, tabulations et autres) des chaînes de caractères). Pour améliorer les performances, il suffit de la modifier très légèrement en ajoutant les éléments suivants en début de fonction, après la déclaration des variables:

g_strstrip( buffer );
return;
Dès lors, après recompilation, la CGI gagne une seconde de temps d'exécution. Allez, plus que 5,5 secondes à gagner et on pourra être satisfait! :-)