2008年6月8日日曜日

apacheのプロセス数を制御する。

July 25 02:56:12 ******* sm-mta[2411]: NOQUEUE: SYSERR(root): daemon: cannot fork: Resource temporarily unavailable
という表示が出て、さっぱりサーバが動かなくなった。

原因;プロセスが上限まで使われ、新しいプロセスを立ち上げられない。
解決法:プロセスを消費しているサーバデーモンなどを停止させ、プロセス数を制限する。

現状契約しているサーバで問題が発生。
何やら契約しているVPSサーバに上限プロセス(プロセスの上限といった方がいいのか)が存在するらしい。
お陰であらゆるコマンドが通らない(ssh接続さえも、プロセスの上限に達しているため、sshのプロセスを起動できない)。
そんなの聞いてないよ・・・。

取り敢えず、無理矢理にでも稼働させなければならないので、プロセスを規定値以下になるように調整することにした。

まずサーバ管理会社に頼んで再起動して貰い、更にapacheを落として貰う。

このサーバで動かしているのはweb(apache)サーバとメールサーバ(procmail,sendmail)。
どちらがプロセスを食うかといわれると、勿論apacheなので、今回はapacheのプロセス数をコントロールする。

プロセス数をコントロールするには、httpd.confを編集し、MaxClientsの値を下げる。
この値以上にはプロセスが発生しない。
apache以外の予想総プロセス数+MaxClientsの数が、規定のプロセス数制限に引っかからないようにすると、無事に安定した。
何かを捨てている気がしないでもないけれども。

ここらへん。
--------------------------------
Timeout 100

KeepAlive On

MaxKeepAliveRequests 50

KeepAliveTimeout 5

MinSpareServers 8
MaxSpareServers 10

StartServers 5

#ServerLimit 80
MaxClients 30

MaxRequestsPerChild 2000

--------------------------------

今回は正直辟易した。
基本的にレンタルサーバの管理会社がやることは、
top
ps
shutdown
この3つしか基本的に叩かない。
ちょっとでも突っ込んで聞くと
「わからない」
「上位プランに変更を」

と言われる。

やる気なさげに「topというコマンド知ってらっしゃいますか」と言われたときは、嗚呼、世も末だ、と一瞬思った。

相変わらずプロセスの中にZombie Processが存在するし、解決策は未だ提示されていない(これは管理会社の責任)。
メールアカウントを増やす際に必ず容量の圧迫が起こるとか絶対直してくれないし。

ただ、一つだけ非を認めると、「一気に大量のアクセス」はさっきlogを見ることができて確認した。
ご免なさい。

*レンタルサーバ管理会社のアドミンって、どの程度の技術力でなれるんだろうと本気で思った。


ラピッドサイトの料金とプロセス数の上限(大体)。
1万円台のプラン :64プロセス前後
1万~2万円台のプラン :75プロセス前後
2万円台のプラン :150プロセス前後
3万~4万円台のプラン :375プロセス前後

1万円台 :75プロセス前後
2万円台のプラン :150プロセス前後
3万~4万円台のプラン :375プロセス前後
詳しくはrapidsiteに電話して聞いてください。

参考URL
httpd.confによるWebサーバの最適化(全3回)
http://www.atmarkit.co.jp/flinux/rensai/apache2_03/apache03a.html







以下取り敢えずうちのhttpd.conf。
--------------------------------
# Apache configuration file for foobarserver.com


### Section 1: Global Environment
ServerType standalone

ServerRoot "/usr/local/apache"

LockFile /usr/local/apache/logs/httpsd.lock

PidFile /usr/local/apache/logs/httpsd.pid

ScoreBoardFile /usr/local/apache/logs/httpsd.scoreboard

ResourceConfig /dev/null
AccessConfig /dev/null

Timeout 100

KeepAlive On

MaxKeepAliveRequests 50

KeepAliveTimeout 5

MinSpareServers 8
MaxSpareServers 10

StartServers 5

#ServerLimit 80
MaxClients 30

MaxRequestsPerChild 2000

Listen 80
Listen 443

#BindAddress *

# Example:
# LoadModule foo_module libexec/mod_foo.so
#
#LoadModule mmap_static_module libexec/mod_mmap_static.so
#LoadModule vhost_alias_module libexec/mod_vhost_alias.so
#LoadModule mime_magic_module libexec/mod_mime_magic.so
#LoadModule negotiation_module libexec/mod_negotiation.so
LoadModule status_module libexec/mod_status.so
#LoadModule info_module libexec/mod_info.so
#LoadModule asis_module libexec/mod_asis.so
#LoadModule speling_module libexec/mod_speling.so
LoadModule rewrite_module libexec/mod_rewrite.so
#LoadModule anon_auth_module libexec/mod_auth_anon.so
#LoadModule db_auth_module libexec/mod_auth_db.so
#LoadModule digest_module libexec/mod_digest.so
#LoadModule proxy_module libexec/libproxy.so
#LoadModule cern_meta_module libexec/mod_cern_meta.so
#LoadModule expires_module libexec/mod_expires.so
#LoadModule headers_module libexec/mod_headers.so
#LoadModule usertrack_module libexec/mod_usertrack.so
#LoadModule perl_module libexec/mod_perl.so
#LoadModule gzip_module libexec/mod_gzip.so
#LoadModule dav_module libexec/mod_dav.so
#LoadModule fastcgi_module libexec/mod_fastcgi.so
#LoadModule auth_mysql_module libexec/mod_auth_mysql.so
#LoadModule auth_pgsql_module libexec/mod_auth_pgsql.so
#LoadModule php4_module libexec/mod_php4-4.3.x.so
LoadModule perl_module libexec/libperl-5.8.4.so
#LoadModule php4_module libexec/mod_php4-4.4.2.so

#ExtendedStatus On

### Section 2: 'Main' server configuration
# ports < 1023, you will need httpd to be run as root initially.
Port 80

User www
Group www

ServerAdmin webmaster@foobarserver.com

ServerName foobarserver.com

DocumentRoot "/usr/local/apache/htdocs"

SSLDisable

SSLNoV2


Options FollowSymLinks
AllowOverride None




Options Indexes FollowSymLinks MultiViews

AllowOverride All

Order allow,deny
Allow from all



UserDir www/htdocs

# Allow CGI's for a UserDir user
#ScriptAliasMatch /~(.*)/cgi-bin(.*) "/home/$1/www/cgi-bin$2"

# Disable a set of users
#UserDir enabled
#UserDir disabled user1 user2 user3


#
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#
# Order allow,deny
# Allow from all
#

#
# Order deny,allow
# Deny from all
#

#



AllowOverride All
Options Indexes MultiViews SymLinksIfOwnerMatch IncludesNoExec



DirectoryIndex index.html index.htm index.cgi index.php index.shtml


AccessFileName .htaccess

#
# Order allow,deny
# Deny from all
# Satisfy All
#


#---------------------------------------------------------------
# 以下は参照元URLとして許可するドメイン
SetEnvIf Referer foobarserver\.com authoritative_site
SetEnvIf Referer foobarserver\.net authoritative_site
SetEnvIf Referer foobarserver\.info authoritative_site


# リモートからのアクセスを拒否するファイルの種類と制限

order deny,allow
Deny from all
Allow from env=authoritative_site

#----------------------------------------------------------------
以下続く・・・。

0 件のコメント:

コメントを投稿