[an error occurred while processing this directive]
[APACHE DOCUMENTATION]

Apache HTTP Server Version 1.3

BSD で走るハイパフォーマンスのウェブサーバ

他の OS のように、listen queue は最初の limit hit です。以下は BSDI 1.x, 2.x, と FreeBSD 2.0 (とそれ以前) でこれをどのように修正するのかについて、"Aaron Gifford <agifford@InfoWest.COM>"からのコメントです:

以下の二つのファイルを編集してください:

/usr/include/sys/socket.h
/usr/src/sys/sys/socket.h
それぞれのファイルで次を捜してください:
    /*
     * Maximum queue length specifiable by listen.
     */
    #define SOMAXCONN       5
"5"を動くと思われるものに変えてください。32 にして問題を生じた二つのマシンを bump してからは、問題を気にしていません。

編集した後、カーネルを再コンパイルして、Apache サーバを再コンパイルして、それからリブートしてください。

既に 32 に設定されている SOMAXCONN で、FreeBSD 2.1 は完全なようです。

非常にロードが重い BSD サーバのための追加
from Chuck Murcko <chuck@telebase.com>

もし、本当は頻繁な BSD の Apache サーバを走らせていないのにシステムが遅いなら、以下を行うといいです。:

これらのユーティリティは、カーネルをチューニングする必要があることを教え、更に RAM を買うかどうかの助けになります。ここには、頻繁に使用しているシステムの BSD カーネルコンフィグパラメータ(実際には BSDI ですが、直接関係がある FreeBSD と 他の 4.4-lite 派生品)があります。前述のツールが使われて、システムメモリはこれらがチューンアップする前に 48 MB に増やされています。

maxusers        256
Maxusers は、たくさんの他のカーネルパラメータを操作します: これらの派生したパラメータの実際の方式は /usr/src/sys/conf/param.c にあります。これらの出されたパラメータは、カーネルコンフィギュレーションファイルにある、自身の値を指定することにより、(ある部分では)無効にされます:
# Network options. NMBCLUSTERS defines the number of mbuf clusters and
# defaults to 256. This machine is a server that handles lots of traffic,
# so we crank that value.
options         SOMAXCONN=256           # max pending connects
options         NMBCLUSTERS=4096        # mbuf clusters at 4096

#
# Misc. options
#
options         CHILD_MAX=512           # maximum number of child processes
options         OPEN_MAX=512            # maximum fds (breaks RPC svcs)
SOMAXCONN は maxusers から派生したものではないので、常に増やす必要があります。現在、128 の listen() の Apache のデフォルトよりも大きいことを保証された値を使いました。

多くの場合、NMBCLUSTERS は最初の必然的な反射で現れるのより、大きく設定されなければなりません。その訳は、もしブラウザが mid-transfer で切断すると、その mbufs がまだフリーでない間の2、3 分に TIME_WAIT ステーツで特定の接続に関するソケット fd が終わるからです。他の理由としては、サーバのタイムアウトで、いくつかの接続が永遠に FIN_WAIT_2 ステーツで終わって、このステーツがサーバでタイムアウトにならないで、ブラウザが最後の FIN を送信しないからです。詳細については、FIN_WAIT_2 ページを見てください。

mbuf クラスタにはいくつかの情報があります(sys/mbuf.h からの):

/*
 * Mbufs are of a single size, MSIZE (machine/machparam.h), which
 * includes overhead.  An mbuf may add a single "mbuf cluster" of size
 * MCLBYTES (also in machine/machparam.h), which has no additional overhead
 * and is used instead of the internal data area; this is done when
 * at least MINCLSIZE of data must be stored.
 */

CHILD_MAX と OPEN_MAX は 512 の子プロセス(ユーザ ID 毎のプロセスの最大値とは異なっています) とファイル descriptors の設定を許可します。これらの値は、特定のコンフィギュレーションのために代わるかもしれません(たくさんの接続やファイルを開くモジュールや CGI スクリプトを持っていれば、高い OPEN_MAX の値です)。もし同じマシンで httpd に加えてたくさんの他の稼動があれば、まだ NPROC を高く設定しなければなりません。この例では、maxusers から派生した NPROC 値はロードするのに十分であることを示しました。

警告

システムが、利用できるシステム RAM よりも多いリソースを使うためにコンフィギュアされているカーネルでは、ブートしないかもしれないことに気をつけてください。 この方法でシステムをチューニングしているときは、常に、知られている利用できるブート可能なカーネルを持っていて、もしチューニングする前にメモリを買う必要があれば、学ぶ前にシステムツールを使います。

RPC サービスは OPEN_MAX の値が 256 よりも大きくなると失敗するでしょう。これは、RPC ライブラリのオリジナル実行機能で、ファイル descriptors を持つバイト値を使っています。BSDI は、その 2.1 のリリースにこの制限を部分的にアドレスしています。

最後に、Apache にはコンフィギュアされた子プロセスのきつい制限があります。

1.0.5 より後の Apache のバージョンでは、httpd.h にある HARD_SERVER_LIMIT のための定義を変更して、もしデフォルトの httpd の 150 の例よりも多く走らせる必要があるなら、再コンパイルする必要があるでしょう。

From conf/httpd.conf-dist:

# Limit on total number of servers running, i.e., limit on the number
# of clients who can simultaneously connect --- if this limit is ever
# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.
# It is intended mainly as a brake to keep a runaway server from taking
# Unix with it as it spirals down...

MaxClients 150
もしこの値を上げるなら、やっていることを知り、あらかじめシステムをモニターして RAM を拡張し、カーネルをチューニングしていることを確認してください。それから、本当のヒットを受け取る準備をします!

BSDI に関して有益な提案と情報をくれた Tony SandersChris Torek に感謝します。

"M. Teterin" <mi@ALDAN.ziplink.net> :

もしカーネルと頻繁に使われるユーティリティが完全に最適化されていれば、本当に役立ちます。 -m486 -fexpensive-optimizations -fomit-frame-pointer -O2
の AMD-133 (486-class CPU) ウェブサーバで FreeBSD カーネルを再構築することは
"unable"のエラーの数を減らそうとします。CPU がしばしばマックスアウトしたからです。


More welcome!

もし役に立つ助言があれば、brian@organic.com へメールを送ってください。

Apache HTTP Server Version 1.3

検索文字
Index Home The English original manual is here.
このページの情報に関わる、ご質問、お問い合わせは、 japache@infoscience.co.jpまで。

JAPACHE ホームページ