apache設定項目(作成中)

  • 投稿者:
  • 投稿カテゴリー:apache

設定勘所

いかにサーバのスペックを使い切ることができるように、設定するかがポイント
もしリクエスト過多となった場合は、処理しきれないリクエストは待ち行列にいれて
待ち行列数を超えると、その後のリクエストに対してエラーを返却する

インストール

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のチューニング(性能編)
ファイルディスクリプタが問題でサーバスペックを使い切れていない可能性も