SSIを使う(その3)
SSIやcgiを大量に使い始めると、サーバリソース不足でエラーが発生することがある。
OSがFreeBSDの場合だとKernel
Configurationで対応できそうな気がするが、すでにMAXUSERSが250程度に設定されているサーバだとすると問題は別にあることになる。
Kernel-configurationの中で以下の所を設定する事がコメントとして記されているが..#
options "MAXDSIZ='(256*1024*1024)'"
options "DFLDSIZ='(256*1024*1024)'"
#
上記値は(バージョンによって異なるかも知れない)MAXUSERSの設定で決定されるようで、これを増やしても変化がない(バージョンもある,と言うべきか)httpサーバはnobody権限で動作している場合が多いのだが、FreeBSDは各ユーザ(nobodyも一つのユーザにすぎない)に割り当てるリソースが決まっている。
根本的には、これを増やさなければリソース不足によるhttpサーバエラーは回避できない。
FreeBSD2.2.6からは/etc/login.confでそれらの割り当てを変更できるようになった。
以下にデフォルト値と設定を変更したものを記す。
--Default--
default
\
cputime=infinity
\
datasize-cur=22M
\
stacksize-cur=8M
\
memorylocked-cur=10M
\
memoryuse-cur=30M
\
filesize=infinity
\
coredumpsize=infinity
\
maxproc-cur=64
\
openfiles-cur=64
\
priority=0
\
requirehome@
\
umask=022
\
tc=auth-defaults
これの値を変更したものが下記である。
default
\
cputime=infinity
\
datasize-cur=22M
\
stacksize-cur=16M
\
memorylocked-cur=10M
\
memoryuse-cur=64M
\
filesize=infinity
\
coredumpsize=infinity
\
maxproc-cur=512
\
openfiles-cur=1024
\
priority=0
\
requirehome@
\
umask=022
\
tc=auth-defaults
この変更は当然ながらroot権限を必要とする。
プロバイダのサーバを使っていて、リソースが足りないからと言ってこの変更を要求したら、それは筋違いというものだ。
まず第一に自分の利用しているSSIやcgiがサーバに余計な負荷をかけていないかを検証すべきである。
特にPerlで書かれたchatはCPU負荷が非常に高くなるので、これを複数個設置しているとすれば他のユーザに相当の迷惑をかけている可能性が高い。
unix環境を自由に使えるプロバイダも増えてきたが、自由を得るためには責任を持たなければいけない。
chatやBBSのcgiを公開しているサイトも多いが、これらは機能重視のあまりサーバ負荷を無視しているように思う。
またC言語で書かれたソフトの中には(ユーザの使用方法によって)簡単に暴走してしまうものもある。
SSI/cgiは便利で魅力的だが、甘いセキュリティとサーバに多大な負荷をかけることを忘れてはいけない。