J'ai un problème avec apache2 httpd. L'apache utilise mpm_prefork et l'application web utilise php.
J'ai remarqué que la machine sur laquelle tourne Apache passe soudainement à 0 % d'utilisation du processeur pendant la nuit. Lorsque j'ai voulu examiner le problème, j'ai vu 75 processus apache (75 étant le nombre maximal de clients) et ils ne faisaient rien.
Quand j'ai vérifié les processus apache, chacun d'entre eux a donné le résultat suivant
Process 18845 attached - interrupt to quit
restart_syscall(<... resuming interrupted call ...>) = 0
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
poll([{fd=22, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
Ok, c'est quoi le Fd22 ?
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
/usr/sbin 18839 www-data 22u IPv4 129846157 0t0 TCP myhost:44697 -> otherhost:http-alt (ESTABLISHED)
/usr/sbin 18844 www-data 22u IPv4 129860789 0t0 TCP myhost:44906 -> otherhost:http-alt (ESTABLISHED)
/usr/sbin 18845 www-data 22u IPv4 129846238 0t0 TCP myhost:44791 -> otherhost:http-alt (ESTABLISHED)
/usr/sbin 18848 www-data 22u IPv4 129858987 0t0 TCP myhost:44967 -> otherhost:http-alt (ESTABLISHED)
/usr/sbin 18852 www-data 22u IPv4 129861780 0t0 TCP myhost:44915 -> otherhost:http-alt (ESTABLISHED)
/usr/sbin 18864 www-data 22u IPv4 129856031 0t0 TCP myhost:44795 -> otherhost:http-alt (ESTABLISHED)
/usr/sbin 18873 www-data 22u IPv4 129856418 0t0 TCP myhost:44908 -> otherhost:http-alt (ESTABLISHED)
/usr/sbin 19225 www-data 22u IPv4 129858977 0t0 TCP myhost:44936 -> otherhost:http-alt (ESTABLISHED)
/usr/sbin 19230 www-data 22u IPv4 129857945 0t0 TCP myhost:44955 -> otherhost:http-alt (ESTABLISHED)
Il s'agit d'une connexion à un autre hôte. Apparemment, cette autre machine (également dans notre réseau) fonctionne mal pendant un cronjob au milieu de la nuit et ne répond pas du tout aux demandes pendant environ 2 heures. Bon, je ne peux actuellement pas résoudre le problème avec l'autre machine et aussi je ne me soucie pas du bien-être des autres machines.
Tout ce que je veux, c'est que les processus meurent s'ils ne peuvent pas être terminés à temps. Apparemment, les processus dans le syscall poll ne comptent pas en termes de php max_execution_time.
Puis-je demander à Apache de tuer ces processus périmés ?
Debian GNU/Linux 7.8
apache2:
2.2.22-13+deb7u4
apache2-mpm-prefork:
2.2.22-13+deb7u4
apache2.2-bin:
2.2.22-13+deb7u4
apache2.2-common:
2.2.22-13+deb7u4
libapache2-mod-php5:
5.3.29-1~dotdeb.0