Depuis déjà 6 mois, comme cela s'était déjà produit, mon serveur plante de temps à autre…
Le démon Apache2 devient fou et déclenche les foudres d'anon, le killer de démon, qui vise à libérer de l'espace mémoire Ram+Swap, mais la Machine est à ce point submergée que rien n'y fait, il est impossible de prendre la main et le disque dur gratte comme un fou, jusqu'à ce qu'on veuille bien lui administrer les magic syst key (SEIUB)
En fait mon serveur s'est retrouvé non pas victime de son succès, mais de la coïncidence de plusieurs événements simultanés :
. scan par les robots de divers moteurs de recherche
+ scan de divers planet
+ consultation de visiteurs de mes deux sites
+ mon propre usage de TinyTinyRSS
= Autant de démon Apache2 qui se lancent que de requêtes html, php5, etc.
Bref, le temps de cerner le coupable et comprendre le problème, j'ai enfin décidé de tenter quelque chose… Apache2 en mode multi-thread
Il m'avait bien semblé voir passer un billet au titre intéressant, et en fouillant les tréfonds de ce cher TinyTinyRSS j'ai pu le retrouver et le mettre en œuvre !
Très clair, on y explique ce qui semble être la solution à mon problème, et la méthode fonctionne très bien !
Maintenant il y a très peu de lourd démon Apache2 et beaucoup de léger démon php.
On peut aussi vérifier la config en créant la fameuse page phpinfo.
Mais ayant eu quelques soucis avec ma config, je vais préciser certaines choses :
- En premier lieux, si vous utilisez un accès https pour lire votre Webmail ou votre TinyTinyRSS, vous risquez de tomber sur une erreur de type :
ERROR : Wrong 'suhosin.session.encrypt' option value
Et effectivement, comme pour /etc/php5/cgi/php.ini, la config cgi de suhosin est elle aussi placée ailleurs.
Il faudra alors éditer /etc/php5/cgi/conf.d/suhosin.ini
et dé-commenter puis mettre à off la ligne suhosin.session.encrypt
suhosin.session.encrypt = off
- Seconde chose, l'upload de fichiers de plus de 130 kio au travers de php s'est révélé impossible (via Dotclear, Owncloud…) avec notamment des erreurs 500.
Et ceci alors même que la configuration dans le nouveau fichier /etc/php5/cgi/php.ini était correcte, c'est à dire :
file_uploads= On
ou Off permet d'autoriser ou non l'envoi de fichiers.
upload_max_filesize = 2M
permet de définir la taille maximale autorisée pour le fichier. Si cette limite est dépassée, le serveur enverra un code d'erreur.
post_max_size = 2M
indique la taille maximale des données envoyées par un formulaire. Cette directive prime sur upload_max_filesize, il faut donc s'assurer d'avoir post_max_size supérieure à upload_max_filesize.
En fait, c'est un autre fichier de config qui fixait la limite de 130 kio !
C'est donc /etc/apache2/mods-available/fcgid.conf qu'il faut amender d'une ligne MaxRequestLen
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
FcgidConnectTimeout 20
MaxRequestLen 1073741824
</IfModule>
Ici j'ai donc mis 1 Gio, valeur configurée par défaut lorsqu'on utilise Apache2 en mode « pas multi-thread»
Ce qui au passage, explique enfin pourquoi avec Owncloud je ne pouvais pas uploader plus d'1 Gio par fichier ^^
Sources :
- http://www.commentcamarche.net/faq/889-php-upload-de-fichiers#configuration-de-php-pour-permettre-l-upload
- http://blog.philippklaus.de/2011/04/fix-mod_fcgid-http-request-length-xyz-so-far-exceeds-maxrequestlen-131072/
- http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidmaxrequestlen