私のApacheは内部サーバーエラー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
しかし、それは助けにはなりませんでした。 350を超える仮想ホストがある場合、私のApacheはまだクラッシュします:/
CentOS 5.9 64ビット-カーネル3.0.65-1.el5.elrepoを使用しています
これは、mod_fastcgiがselect()を多重化オプションとして使用するためです。選択は、このことについてはかなり悪いです、manページは選択のために指定します。
Fd_setは固定サイズのバッファーです。負の値、またはFD_SETSIZE以上のfdの値を使用してFD_CLR()またはFD_SET()を実行すると、未定義の動作が発生します。さらに、POSIXではfdが有効なファイル記述子である必要があります。
FD_SETSIZEは通常1024であるため、一般に1024を超えるファイル記述子はサポートされていません。 FD_SETSIZEインクルードサイズをいじることができますが、このような変更を行うと、POSIX準拠を目指す他のプログラムにも影響を与える可能性があります。私の意見では、アプリケーション作成者がシステムのソースコードを変更してこれを機能させることを提案している場合、アプリケーションは根本的に壊れています。
私はmod_fastcgiから離れて別の実装を使用することをお勧めします。 FastCGIデーモンの開始方法に応じて、これをどのように行うかに依存します。
mod_fcgid
は1つのオプションであるか、新しいパッチでは代わりにmod_proxy_fcgi
を使用できます。