設定勘所
いかにサーバのスペックを使い切ることができるように、設定するかがポイント
もしリクエスト過多となった場合は、処理しきれないリクエストは待ち行列にいれて
待ち行列数を超えると、その後のリクエストに対してエラーを返却する
インストール
root@ubuntu1204:/home/shimizu# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=12.04 DISTRIB_CODENAME=precise DISTRIB_DESCRIPTION="Ubuntu 12.04.5 LTS" root@ubuntu1204:/home/shimizu# aptitude install apache2-mpm-event ... root@ubuntu1204:/home/shimizu# apache2 -V Server version: Apache/2.2.22 (Ubuntu) Server built: Jul 24 2015 17:25:43 Server's Module Magic Number: 20051115:30 Server loaded: APR 1.4.6, APR-Util 1.3.12 Compiled using: APR 1.4.6, APR-Util 1.3.12 Architecture: 64-bit Server MPM: Event threaded: yes (fixed thread count) forked: yes (variable process count) ...
MPM:event
workerとの違いはKeep-Alive(持続的接続)の処理方法
workerはKeep-Aliveのためにスレッドを待機させるが
eventはKeep-Alive用に別のスレッドに割り振る
デフォルト状況確認
root@ubuntu1204:/etc/apache2# ps afx | egrep "[a]pache|[C]OMMAND" PID TTY STAT TIME COMMAND 59190 ? Ss 0:00 /usr/sbin/apache2 -k start 59195 ? S 0:00 \_ /usr/sbin/apache2 -k start 59196 ? Sl 0:00 \_ /usr/sbin/apache2 -k start 59197 ? Sl 0:00 \_ /usr/sbin/apache2 -k start root@ubuntu1204:/etc/apache2# ps -efLl | egrep "[C]MD|[a]pache" F S UID PID PPID LWP C NLWP PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 1 S root 59190 1 59190 0 1 80 0 - 15390 poll_s 12:08 ? 00:00:00 /usr/sbin/apache2 -k start 5 S www-data 59195 59190 59195 0 1 80 0 - 15323 wait_f 12:08 ? 00:00:00 /usr/sbin/apache2 -k start 5 S www-data 59196 59190 59196 0 27 80 0 - 104035 pipe_w 12:08 ? 00:00:00 /usr/sbin/apache2 -k start 1 S www-data 59196 59190 59204 0 27 80 0 - 104035 futex_ 12:08 ? 00:00:00 /usr/sbin/apache2 -k start ...(上と同じスレッドが合計25個) 1 S www-data 59196 59190 59229 0 27 80 0 - 104035 ep_pol 12:08 ? 00:00:00 /usr/sbin/apache2 -k start 5 S www-data 59197 59190 59197 0 27 80 0 - 87631 pipe_w 12:08 ? 00:00:00 /usr/sbin/apache2 -k start 1 S www-data 59197 59190 59200 0 27 80 0 - 87631 futex_ 12:08 ? 00:00:00 /usr/sbin/apache2 -k start ...(上と同じスレッドが合計25個) 1 S www-data 59197 59190 59251 0 27 80 0 - 87631 ep_pol 12:08 ? 00:00:00 /usr/sbin/apache2 -k start
<IfModule mpm_event_module> # StartServers ≦ MaxClients / ThreadsPerChild でなければならない # MinSpareThreads / ThreadsPerChild ~ MaxSpareThreads / ThreadsPerChild StartServers 2 # アイドルなスレッド数の最小値 MinSpareThreads 25 # アイドルなスレッド数の最大値 MaxSpareThreads 75 # 子プロセス毎のスレッド数(ThreadsPerChild)の設定可能な上限値 ThreadLimit 64 # 子プロセス毎に生成されるスレッド数 ThreadsPerChild 25 # 最大同時リクエスト数 MaxClients 150 MaxRequestsPerChild 0 </IfModule>
ps見方
LWP:軽量プロセス(light weight process)またはスレッドID
PPID:親プロセスのプロセス ID
NLWP:プロセスにおける lwp(スレッド)の数
S(PROCESS STATE CODES):プロセス状態
S:割り込み可能なスリープ状態
s:セッションリーダ
l:マルチスレッド
F(PROCESS FLAGS):プロセスのフラグ
1:forked but didn’t exec
4:used super-user privileges
5:1+4
WCHAN:スリープしているカーネル関数名
いろいろ試してみる
@todo
ab -n 5000 -c 500
参考URL
psコマンドでスレッドに関する情報を表示するには?
Apache HTTP Server: MPMパラメータ チートシート
Apacheのチューニング(性能編)
ファイルディスクリプタが問題でサーバスペックを使い切れていない可能性も