Submitted by sasaki on 火曜, 2006-03-28 15:39.
普段どおり、自社サイトにアクセスすると
Forbidden
んー。アクセスできません ヽ(´ー`)ノ
■ログを確認する
[Sun Mar 19 23:50:09 2006] [error] [client 6X.215.32.12] (24)Too many open files: file permissions deny server access: /export/home/www/public_html/xxx.html
[Sun Mar 19 23:50:11 2006] [error] [client 6X.236.103.72] (24)Too many open files: file permissions deny server access: /export/home/www/public_html/xxx.html
[Sun Mar 19 23:50:12 2006] [error] [client 21X.255.229.237] (24)Too many open files: file permissions deny server access: /export/home/www/public_html/aaa.html
Too many open files だそうです。はい。
■Apacheを再起動する
とりあえず、Apacheを停止して、起動します。再起動はダメです。
# /etc/init.d/apachectl stop
# /etc/init.d/apachectl start
とりあえず、これで生き返りましたよ。
■原因を探る
Helixのストリーミングサーバがたくさんファイルを扱っていたようで、デスクリプタを増やす必要あり。
■ディスクリプターを増やす
1プロセスが開けるファイルが256と少ない。
# ulimit -a
core file size (blocks) unlimited
data seg size (kbytes) unlimited
file size (blocks) unlimited
open files 256
pipe size (512 bytes) 10
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes 15877
virtual memory (kbytes) unlimited
ということで、1プロセスあたりのファイル・ディスクリプタの数を増やすために、/etc/system にあるシステム・パラメーターを変更する。これによりSolarisのスケーラビリティーを上げるのだ。
ファイル・ディスクリプターの数を 1024 にするために、以下の行を /etc/system のお尻に付け加えて、再起動すればOKだ。(電源を落とす時間が必要になるのが残念)
set rlim_fd_max=1024
■Apacheの設定を調べる
再起動後に、Apacheのコンパイル時の設定を調べる。256という制限が付いたようなので、もう一度コンパイルし直すか...。
# /usr/local/apache/bin/httpd -V
Server version: Apache/1.3.31 (Unix)
Server built: Aug 31 2004 17:49:27
Server's Module Magic Number: 19990320:16
Server compiled with....
-D HAVE_MMAP
-D USE_MMAP_SCOREBOARD
-D USE_MMAP_FILES
-D HAVE_FCNTL_SERIALIZED_ACCEPT
-D HAVE_SYSVSEM_SERIALIZED_ACCEPT
-D HAVE_PTHREAD_SERIALIZED_ACCEPT
-D DYNAMIC_MODULE_LIMIT=64
-D HARD_SERVER_LIMIT=256
-D SHARED_CORE
-D HTTPD_ROOT="/usr/local/apache"
-D SUEXEC_BIN="/usr/local/apache/bin/suexec"
-D SHARED_CORE_DIR="/usr/local/apache/libexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/httpd.scoreboard"
-D DEFAULT_LOCKFILE="logs/httpd.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
-D ACCESS_CONFIG_FILE="conf/access.conf"
-D RESOURCE_CONFIG_FILE="conf/srm.conf"
ちなみに入っているモジュールの一覧は、このように確認する。
# /usr/local/apache/bin/httpd -l
Compiled-in modules:
http_core.c
mod_env.c
mod_log_config.c
mod_mime.c
mod_negotiation.c
mod_status.c
mod_include.c
mod_autoindex.c
mod_dir.c
mod_cgi.c
mod_asis.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_access.c
mod_auth.c
mod_so.c
mod_setenvif.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec
ほとんど、ノーマル状態だな...。