J.D. Bronson (jb at ktxg dot com) の報告によると、moneycentral.msn.com や www.mbnanetaccess.com. といったソースサーバと通信が出来なかったそうです。 J.D は以下のようにして問題を回避できたそうです。
select(3C)は、1024以上のファイル記述子を処理できません。 configureスクリプトは、デフォルトでpoll()を有効にする事でしょう。 poll()は多分、8192以上のファイル記述子使うことでしょう。
古いSquidのバージョンを使っているなら、include/autoconf.h の中のHAVE_POLL か、src/Makefileの中に-DUSE_POLL=1を定義すると良いでしょう。
libmalloc.aはメモリリークを起こします。 configureの際に、-lmalloc を使用しないでください。
David J N Begley. によると、DNSはnscdから呼ばれることで遅くなるというミステリアスな挙動をします。 /etc/nscd.confを編集して、
としてください。
どうやらnscdは、SquidがDNSに対する検索要求を行った際に、DNS要求を連続して発生させることで速度を落としている様子です。 もし注意深くログを観察すれば、多くのDNS要求を発生させていることに気づくと思います。
Jason Armistead. によると /etc/nsswitch.conf は名前解決の順を決定します。 DNSでの検索を有効にする為に、このファイルに明示してください。
Chris Tilbury. によると、ローカルでNISサーバ(ypserv)を動かし、etc/nsswitch.conf のhostエントリで、NISを指定している場合、NISはNISによって発見できなかった名前をDNSのリゾルバを使って発見しようと試みる為にDNS検索が遅くなる可能性があります。
対策は、
FreeBSD-2.2.2-RELEASEにはT/TCPのバグがあります。 sysinstallの際に、"TCP Extensions "を無効にするか、あるいは/etc/rc.confでTCP Extensionsを無効にし
として下さい。
私たちはSqudiのプロセス間通信で奇妙なことに気付きました。 たびたび、dnsserverプログラムからの情報がはき出されるようで、これをデバックしてみた。
おもしろい事に、最小のは一般的な100バイトのリードです。 2番目の読み込みでは、要求に対して追加の待ち時間が加えられる筈です。 デジタルUNIXでは0.01秒、FreeBSDでは0.10秒です。
このバグを修正する為のパッチは以下の通りです。
=================================================================== RCS file: /home/ncvs/src/sys/kern/uipc_socket.c,v retrieving revision 1.40 retrieving revision 1.41 diff -p -u -r1.40 -r1.41 --- src/sys/kern/uipc_socket.c 1998/05/15 20:11:30 1.40 +++ /home/ncvs/src/sys/kern/uipc_socket.c 1998/07/06 19:27:14 1.41 @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)uipc_socket.c 8.3 (Berkeley) 4/15/94 - * $Id: FAQ.sgml,v 1.213 2004/01/16 23:12:55 hno Exp $ + * $Id: FAQ.sgml,v 1.213 2004/01/16 23:12:55 hno Exp $ */ #include <sys/param.h> @@ -491,6 +491,7 @@ restart: mlen = MCLBYTES; len = min(min(mlen, resid), space); } else { + atomic = 1; nopages: len = min(min(mlen, resid), space); /*
----
バグを直さず、別の方法を取るならカーネルのMSIZEを増やす方法があります。 これは、/usr/include/machine/param.h の中で定義されており、デフォルトでは128になっています。これを
/var/yp/Makefile に以下のセクションがあります。
Squidの起動には lo0 のインターフェースが必要でこれが無いとcommBind. というエラーになります。
FreeBSD 3.3 Errata
Notes: (FreeBSD3.3のバグノートから)
問題: /etc/rc.confの中のネットワークデバイスの値は、本来であれば自動的に編集されて、ループバックデバイスは「auto」から「lo0」に書き換えられる筈ですがそうはなりません。というわけでエディタ(viで)、rc.confを手動で編集してs/auto/lo0/としてネットワークインターフェースのデバイスを編集してください。
Thanks to Robert Lister.
jail環境下におけるSquidの実行の問題を何人か報告しています。 Squidは次のようなメッセージをはき出します。
jail環境でのSquid.confで、'udp_outgoing_addr' にてネットワークインターフェースを明示的に指定する事で問題を解決できます。
もし、Squidを libgnumalloc とccを使ってコンパイルしたなら、mstats() には間違った値が戻ります。 libgnumalloc とgccを組み合わせれば正しい結果を戻します。
BSD/OS上でSquidをコンパイルすると障害を発生するという報告があります。
Linux2.0.30を使っているなら、バグだと思われますので別のバージョンで試してみてください。
cache_effective_user
にnobody
をセットしたら動作しなかったという報告がありました。 nobody
以外では正常だったということです。 解決策の1つは、nobody
以外のユーザIDを仕様することです。
別の問題として、RedHat5.0のsetresuid() には問題がありそうです。 この対策には、以下の2つ方法が考えられるます。1つはSquidのConfigure前であれば、
という方法で、もう1つは include/autoconf.h のHAVE_SETRESUID をコメントにする方法です。
また、何人かのユーザーは、このエラーがNIS構成による結果であると報告してます。/etc/nsswitch.confの中のpasswdとgroupの行に、compat を加えることによって問題は解決します。
Russ Mellon によるとこれらの問題はカーネル2.2で解決しているとの事です。
Linuxの正規表現ライブラリは遅い事が報告されています。 解決には、GNUregexライブラリを使ってください。 Squid2からは、configureのオプションで --enable-gnuregex として指定できるようになっています。
Radu Greab によると、gethostbyname()はglibc 2.1.1のRedHat 6.0でメモリリークを起こします。 応急対応としては、/etc/nsswitch.conf の中でnisplusサービスの部分を削除してください。
RedHat bug
id 3919. を参照してください。
初期のLinuxのカーネルにはこれを引き起こすバグがあります。 別のバージョンのLinuxを使ってください。
これは、いくつかのバージョンのglibcのバグです。 幾つかのカーネルヘッダーの誤った内容によりglibcが破壊されました。
このglibcのバグは2.1(または2.0)以前のことだと思います。 2つの解決策があります。
幾つかのサイトに接続すると、"(111) Connection refused"や"(110)
Connection timed out'"といってつながらないかも知れません。
これは、Linuxに実装されたECN(Explicit Congestion Notification
)に問題がありTCP/IPやファイヤーウォールに問題を起こすためです。 このような問題のあるサイトは、ECN Hall of Shameで報告されています。
解決には、問題のあるサイトに連絡して、問題のLinuxを変更してもらうか、あなたの方で以下のコマンドで無効にする方法があります。
gccとHP-UXの組合わせにおいて、発生します。 Squid2.2で発生するようです。
Irix6とGCCの2.8.1以上の組合せの問題です。 GCCではなく通常のCを使ってください。
F.J. Bosscha によると:
NOFILES と NUMSP のカーネルパラメータの値を増やしてください。 またtcp-connections の数も増やしてください。にもかかわらずsquidのログファイルにファイルディスクリプタが3000、というようなになってファイルディスクリプタが不足したと報告されたなら、
残された1つの方法は、システムが処理するTCPコネクションの数です。 デフォルトでは256です。 しかし接続するクライアントの数によって十分な数にしてください。
■ "shmat failed"エラーとなる
AIXは32ビットプロセスで動作しており、共有メモリセグメントが最大11までに制限されています。この制限はAIX4.2.1で外されましたがSquidを起動する際に環境変数でEXTSHM=ON を設定する必要があります。
■ Squidのメモリが256M以上になってコアダンプします
32ビットプロセスのデフォルトメモリモデルでは256MB以上のスタックやデータのメモリを使えません。 Squidで大きなメモリを使うには、
LDR_CNTRL
環境変数をセットしてください。 (例:LDR_CNTRL="MAXDATA=0x80000000"
)または
-bmaxdata:0x80000000 または
詳細についてはIBM's documentation をご覧になってください。
参考: