Назад | Перейти на главную страницу

дескриптор файла сокета (1063) больше, чем FD_SETSIZE (1024), вам, вероятно, потребуется перестроить Apache с большим FD_SETSIZE

Мой Apache выдает ошибки Internal Server Error 500 и ведет такие журналы:

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

Я увеличил пределы FD внутри:

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

и

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

а также

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

ulimit -n
1000000

но это не помогло. Мой Apache по-прежнему дает сбой, если виртуальных хостов больше 350: /

Я использую 64-разрядную версию CentOS 5.9 - ядро ​​3.0.65-1.el5.elrepo

Это потому, что mod_fastcgi использует select () в качестве опции мультиплексирования. Select очень плох для этого, на странице руководства указано для select;

Fd_set - это буфер фиксированного размера. Выполнение FD_CLR () или FD_SET () со значением fd, которое отрицательно, равно или больше FD_SETSIZE, приведет к неопределенному поведению. Более того, POSIX требует, чтобы fd был допустимым дескриптором файла.

FD_SETSIZE обычно равен 1024, поэтому файловые дескрипторы более 1024 в целом не поддерживаются. Вы можете возиться с FD_SETSIZE include sizes, как и вы, но внесение подобных изменений может повлиять и на другие программы, которые стремятся быть совместимыми с POSIX. На мой взгляд, если автор приложения предлагает изменить исходный код системы, чтобы заставить эту работу работать, тогда приложение в корне не работает.

Я предлагаю отказаться от mod_fastcgi и использовать другую реализацию. В зависимости от того, как вы смотрите, ваши демоны FastCGI могут зависеть от того, как вы это делаете.

mod_fcgid это один из вариантов, или более новые апачи могут использовать mod_proxy_fcgi вместо.