o descritor de arquivo de soquete (1063) é maior que FD_SETSIZE (1024), você provavelmente precisará reconstruir o Apache com um FD_SETSIZE maior

3

Meu Apache está lançando erros e logs do Servidor Interno Erro 500 assim:

> [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

Eu elevei os limites de FD dentro:

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

e

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

e também

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

ulimit -n
1000000

mas isso não ajudou. Meu Apache ainda está falhando se mais de 350 virtualhosts: /

Estou no CentOS 5.9 de 64 bits - kernel 3.0.65-1.el5.elrepo

    
por Spacedust 08.04.2013 / 00:09

1 resposta

3

Isso ocorre porque mod_fastcgi usa select () como uma opção de multiplexação. Select é muito ruim para essas coisas, a página man especifica para select;

An fd_set is a fixed size buffer. Executing FD_CLR() or FD_SET() with a value of fd that is negative or is equal to or larger than FD_SETSIZE will result in undefined behavior. Moreover, POSIX requires fd to be a valid file descriptor.

FD_SETSIZE é normalmente 1024, portanto, os descritores de arquivo acima de 1024 não são suportados em geral. Você pode mexer com os tamanhos de inclusão FD_SETSIZE como você fez, mas fazer alterações como essa também pode afetar outros programas que visam ser compatíveis com POSIX. Na minha opinião, se o escritor do aplicativo está sugerindo alterar o código-fonte do sistema para fazer este trabalho, então o aplicativo está fundamentalmente quebrado.

Sugiro sair do mod_fastcgi e usar outra implementação. Dependendo de como você está olhando seus daemons FastCGI pode depender de como você faz isso.

mod_fcgid é uma opção ou os novos apaches podem usar mod_proxy_fcgi .

    
por 08.04.2013 / 01:03