1 votes

Les processus Apache deviennent périmés mais ne se terminent pas.

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

1voto

g491 Points 973

Vous pouvez essayer si la directive TimeOut peut faire l'affaire. http://httpd.apache.org/docs/2.2/mod/core.html#timeout

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X