2 votes

Le descripteur de fichier du socket (1063) est plus grand que FD_SETSIZE (1024), vous devez probablement reconstruire Apache avec un FD_SETSIZE plus grand.

Mon Apache génère des erreurs 500 Internal Server Error et des journaux comme celui-ci :

> [Sun Apr 07 23:35:24 2013] [error] [client 124.162.30.45] (2)No such
> file or directory: FastCGI: failed to connect to server
> "/home/magda_00aa/sportxxx.pl/sportxxx.pl.0fake": socket file
> descriptor (1063) is larger than FD_SETSIZE (1024), you probably need
> to rebuild Apache with a larger FD_SETSIZE, referer:
> http://www.surf4web.com/surfing.php?id=haoduodeng2012

J'ai augmenté les limites du FD à l'intérieur :

cat /usr/include/bits/typesizes.h | grep FD
#define __FD_SETSIZE            65536

et

cat /usr/include/linux/posix_types.h | grep FD_SETSIZE
#undef __FD_SETSIZE
#define __FD_SETSIZE    65536
#define __FDSET_LONGS   (__FD_SETSIZE/__NFDBITS)

et aussi

/sbin/sysctl fs.file-max
fs.file-max = 512000

ulimit -n
1000000

mais cela n'a pas aidé. Mon Apache continue de se planter s'il y a plus de 350 virtualhosts :/

Je suis sur CentOS 5.9 64-bit - kernel 3.0.65-1.el5.elrepo

0 votes

Veuillez noter que le "fd_set" est une structure du noyau, la modification de FD_SETSIZE nécessiterait la recompilation du noyau lui-même. Sinon, le noyau utilisera toujours un maximum de la valeur originale. De plus, la valeur normale par défaut est fixée à 1024, ce qui utilise 128 octets de mémoire, alors que 65536 nécessite 8k de mémoire par structure.

3voto

Matthew Ife Points 22370

Ceci est dû au fait que mod_fastcgi utilise select() comme option de multiplexage. Select est assez mauvais pour ce genre de choses, la page de manuel précise pour select ;

Un fd_set est un tampon de taille fixe. Exécution de FD_CLR() ou FD_SET() avec une valeur de fd qui est négative ou qui est égale ou supérieure à FD_SETSIZE entraînera un comportement non défini. De plus, POSIX exige que fd soit un descripteur de fichier valide.

FD_SETSIZE est normalement 1024, donc les descripteurs de fichiers supérieurs à 1024 ne sont pas supportés en général. Vous pouvez modifier les tailles d'inclusion de FD_SETSIZE comme vous l'avez fait, mais de tels changements peuvent avoir un impact sur d'autres programmes qui visent à être conformes à POSIX. À mon avis, si l'auteur de l'application suggère de modifier le code source du système pour que cela fonctionne, alors l'application est fondamentalement défectueuse.

Je suggère d'abandonner le mod_fastcgi et d'utiliser une autre implémentation. La façon de procéder peut dépendre de la façon dont vous fixez vos démons FastCGI.

mod_fcgid est une option ou les apaches plus récents peuvent utiliser mod_proxy_fcgi à la place.

0 votes

J'utilise php-fpm

0 votes

FastCGI n'est qu'un protocole, ce que vous utilisez côté serveur n'est pas le problème, c'est le côté client qui est à l'origine de vos problèmes.

1 votes

Comment recompiler Apache correctement ? Je ne trouve aucun paramètre dans les fichiers de configuration.

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