#topicpath *OpenBSDでhttpdをスケールさせる [#v19f2374] RIGHT:川俣 吉広 ~ EBUG勉強会 @ 新潟, 2014/11/15 **発端 [#wdbc1063] 以前この勉強会で紹介したウェブ/メルマガのサーバが、アクセス過多によりトップページが見れなくなっているという報告を受ける。 - トップページが「500 Internal Server Error」を表示していることを確認。 - SSHでログインし、状況調査 -- httpd (Apache) の error_logを確認 ---子プロセスが起動できなくなっている。 [Mon Nov 3 15:15:51 2014] [error] [client xxx.xxx.xxx.xxx] (35)Resource temporarily unavailable: couldn't spawn child process: /var/www/docs/pub/index.cgi ---静的なページは正常にアクセスできる ---ロードアベレージは、1時間平均で0.8~1.0, 瞬間最大で7~8程度 ---CPU usageはピークで85%程度 ---スワップは0MB … 起動から一回も使われていない。 ---ネットワークのスループットは10Mb/sを少し超える程度。 - ... CPU, メモリなどのリソースは枯渇していないが、プロセスの起動数になんらかの制限がかかっている。 - ... サーバは2台が並列稼動しているが、両方とも同様な状況。 **応急対応 [#n2f7a8d8] - index.cgi を index.html に変更 ~ → User Agent によって、ケータイ端末をリダイレクトしていた。 - 以下のように設定値を変更し、httpdを再起動 /etc/login.conf default:\ :path=/usr/bin /bin /usr/sbin /sbin /usr/X11R6/bin /usr/local/bin:\ :umask=022:\ :datasize-max=512M:\ :datasize-cur=512M:\ :maxproc-max=256:\ :maxproc-cur=128:\ :openfiles-cur=128:\ :stacksize-cur=4M:\ :localcipher=blowfish,6:\ :ypcipher=old:\ :tc=auth-defaults:\ :tc=auth-ftp-defaults: # www - resource definition for web processes # www:\ - :maxproc=512:\ + :maxproc-max=384:\ + :maxproc-cur=384:\ :tc=default:\ 設定をチェックした段階では、defaultログインクラスではmaxproc-max, maxproc-curがそれぞれ 指定されているのに対し、wwwログインクラスではmaxproc指定のみのため、プロセス最大数の設定数が 上書きされているかどうか不明だったため、maxproc-max, maxproc-curを用いる設定に書き直した。 /var/www/conf/httpd.conf # It is intended mainly as a brake to keep a runaway server from taking # the system with it as it spirals down... # -MaxClients 256 +MaxClients 192 プロセス数の上限で制限がかかっていると仮定し、httpdのプロセス数を減らすことで 子プロセス(*.cgi)の数を増やせるようにした。 → 30分ほどで不具合は解消 - アクセスそのものが減少し - 上記対策が効を奏した(かどうか、本当は不明) **恒久対策 [#o48c211b]