[gull] Question/problème PHP-FPM

Marc SCHAEFER schaefer at alphanet.ch
Tue Jan 8 09:15:31 CET 2019


On Tue, Jan 08, 2019 at 08:30:02AM +0100, Alexis Domjan wrote:
> [06-Jan-2019 01:05:03] NOTICE: using inherited socket fd=55,
> "/var/lib/php5-fpm/web35.sock"
> [06-Jan-2019 01:05:03] NOTICE: using inherited socket fd=55,
> "/var/lib/php5-fpm/web35.sock"

Un inherited socket, pour moi, ça peut être deux choses:

   a) php-fpm a fait un nouveau fork, pour une raison ou une autre
      (p.ex. rechargement de config ou de script PHP, voir le test
      que te propose Félix), et a passé un descripteur à sa nouvelle
      instance (fils) -- pourquoi passerait-il le mauvais ?

   b) apache2 et php-fpm se passent les sockets de connexion entre
      processus non-fils: https://keithp.com/blogs/fd-passing/
      et il y a mélange -- mais dans ce cas ça serait simplement le mauvais site
      qui s'afficherait

Ici, j'ai l'impression que ton /var/lib/php5-fpm/web35.sock est
peut-être justement le système de communication local (UNIX domain
socket) qui permet à apache2 et à php-fpm de communiquer et
aussi de se passer les sockets de connexion (c'est plus
efficace que de faire du proxying).

Est-ce que les deux sockets des deux instances php-fpm sont bien
différents ?  Est-ce que php-fpm est en fait un seul processus qui
lance une instance séparée par site ?

Quand on lit la doc php-fpm, on voit qu'on peut protéger chacun
des sites via chroot (donc le socket doit alors être dans le chroot,
et donc une instance séparée php-fpm par client), est-ce ce qui est fait ici?

> Quand le problème s'est produit, j'ai regardé ce que disait /proc/*/fd pour
> les processus php-fpm de ce pool et j'ai juste vu que le socket n'était pas
> le même, mais je ne sais pas comment faire pour connaître le chemin du
> socket ouvert par un processus, on peut obtenir cette info ?

Plutôt avec netstat.

Tiens, puisque j'ai un compte sur une de tes machines, autant l'utiliser:

schaefer at platinum:~$ netstat -anp | grep php
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
unix  2      [ ACC ]     STREAM     LISTENING     1613770779 -                   /run/php/php7.1-fpm.sock
unix  2      [ ACC ]     STREAM     LISTENING     1688082839 -                   /var/run/php5-fpm.sock

A voir oui, les deux sockets sont différents, mais ici pour deux version de PHP;
il semblerait qu'il n'y ait qu'un seul socket global pour toutes les instances
php5-fpm, et moi je préférerais le chroot.

Y-a-t-il toutefois:
   - un socket par version de php-fpm pour communiquer avec apache2
   - un socket pour communiquer entre chaque instance de php-fpm
     d'une version particulière ?



More information about the gull mailing list