Apache/PHP sur FreeBSD : le truc qui sauve

On a beau vanter la supériorité de tel ou tel OS, une stabilité légendaire ou une performance incomparable du logiciel X ou Y, il arrive toujours que certaines combinaisons fournissent des résultats surprenants. C'est le cas par exemple d'Apache (2) avec mod_php (4 ou 5), sur FreeBSD (6 dans mon cas).

Cette combinaison, et peut être d'autres, a le gros inconvénient d'être sensible à l'ordre de chargement des extensions de PHP. Pour ma part, c'est la seconde fois que je suis confronté à des plantages des démons httpd à cause du simple fait que les extensions PHP ne sont pas chargées dans l'ordre idéal. Sur FreeBSD, le chargement en question est orchestré par le fichier /usr/local/etc/php/extensions.ini. Cela ressemble à ça :

extension=filter.so
extension=hash.so
extension=json.so
extension=gettext.so
extension=pcre.so

Si par malheur vous avez plus d'une poignée de ces extensions, vous risquez un jour de tomber sur un enchaînement problématique. Par chance, mon problème n'était pas dramatique : Apache faisant un segfault uniquement au moment de quitter.

Voilà les traces dans /var/log/messages des process fils httpd quittant sur un signal 11 au moment de se terminer :

kernel: pid 51113 (httpd), uid 80: exited on signal 11
kernel: pid 16830 (httpd), uid 80: exited on signal 11

Et voilà la trace du process parent httpd au moment d'un apachectl restart ou stop :

kernel: pid 57931 (httpd), uid 0: exited on signal 11 (core dumped)

Après une recherche intensive, je suis tombé sur un petit bout de script shell qui rend bien service : fixphpextorder.sh. Ce script écrit par J. Pingle permet de ré-ordonner les extensions PHP dans une configuration supposée non-conflictuelle. En deux mots comme en mille : ça marche !
Vous lancez le script (à partir d'un compte utilisateur ayant les droits d'écriture sur le fichier /usr/local/etc/php/extensions.ini) et vous relancer votre Apache. Normalement, c'est la fin des plantages. Si ils persistent n'hésitez pas à le faire savoir à l'auteur du script, ce genre de choses ne peut s'améliorer qu'avec le retour des utilisateurs.

Related posts

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.