プロキシ作ってから結構立つけど、たまにセッションが詰まるような動きすることがあるので調査。
■セッション詰まりっぽい動きなので、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
まあ、こんなものかな?
とりあえず、体感速度も向上したし、セッション詰まりっぽい動きはなくなったので解決としよう。