Apache の Reverse Proxy 設定調整

プロキシ作ってから結構立つけど、たまにセッションが詰まるような動きすることがあるので調査。

■セッション詰まりっぽい動きなので、ESTABLISH なセッション数をカウントしてみる
※大量にロードが発生するページを15タブで一斉リロード × 3回したときの最大値

# watch -n 1 "netstat -an | wc -l"

23471

# watch -n 1 "netstat -an | grep EST | wc -l"

614

# watch -n 1 "netstat -an | grep WAIT | wc -l"

22419

Oh…
Apache <-> Squid <-> WebServer のうち、Apache <-> Squid のところがえらいことになっていた。
どうやら、Apache で Keep Alive 設定忘れていたようだ。
いや、やっていたんだけど、Reverse Proxy のところにも書く必要があった。

■修正

# vi /etc/httpd/conf.d/proxy.conf

KeepAlive 関連3行追加。

Listen 8080

<VirtualHost *:8080>
    ServerAdmin root@cielnotron.sgv417.dip.jp
    DocumentRoot /var/www/html
    ServerName cielnotron.sgv417.dip.jp:8080
    ErrorLog logs/proxy-error_log
    CustomLog logs/proxy-access_log common

    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 5

    ProxyRemote * http://127.0.0.1:3128/
    <IfModule mod_proxy.c>
      ProxyRequests On

      <Proxy *>
          Order deny,allow
          Deny from all
          Allow from 192.168.24.
      </Proxy>

      <IfModule mod_disk_cache.c>
          CacheEnable disk /
          CacheRoot "/var/cache/mod_proxy"
          CacheDirLevels 3
          CacheDirLength 2
          CacheMinFileSize 524288
          CacheMaxFileSize 1073741824
      </IfModule>

      <IfModule mod_mem_cache.c>
          CacheEnable mem /
          MCacheSize 512000
          MCacheMinObjectSize 1
          MCacheMaxObjectSize 1048576
          MCacheMaxObjectCount 10000
          MCacheRemovalAlgorithm LRU
      </IfModule>
    </IfModule>
</VirtualHost>

■KeepAlive を有効にして再テスト

# watch -n 1 "netstat -an | wc -l"

15401

# watch -n 1 "netstat -an | grep EST | wc -l"

348

# watch -n 1 "netstat -an | grep WAIT | wc -l"

14497

ほぼ半分まで削減したけど、まだ多い。
そういえばデフォルトのままだから、Prefork になっているので、Worker に切り替えてみる。

■Prefork から Worker へ切り替え

# vi /etc/sysconfig/httpd
--------------------------------------------------------------------------------
-#HTTPD=/usr/sbin/httpd.worker
+HTTPD=/usr/sbin/httpd.worker
--------------------------------------------------------------------------------
# service httpd restart

■Worker モードにして再々テスト

# watch -n 1 "netstat -an | wc -l"

12074

# watch -n 1 "netstat -an | grep EST | wc -l"

329

# watch -n 1 "netstat -an | grep WAIT | wc -l"

11049

まあ、こんなものかな?
とりあえず、体感速度も向上したし、セッション詰まりっぽい動きはなくなったので解決としよう。

カテゴリー: めも パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です