負荷テストその2(Grails 0.5)
昨日のHttpSessionがいっぱいになってしまう点については、大量アクセスが発生するサイトではよくあることだ。大量アクセスが短期に発生するようなページで無駄にHttpSessionを使用するとTomcatの場合、OutOfMemoryErrorが発生し、発生したスレッドによってはそのままハングしてしまうという事象はTomcat 5.0 ではよくおきていた。その後の5.5、6.0では検証していないので分からない。ただ、昨日の負荷テストの結果を見る限り同じ?なのではないかと思われる。
まあ、これに対してはよくあることなので独自のHttpSessionの実装が実は用意してある。フィルタをかましてHttpServletRequestをラップして独自のHttpSessionを返す、というやつだ。これをGrailsのプラグインでweb.xmlにちょちょいと追加するようなプラグインを作ってインストールした。
ちなみにセッションの永続化についてはehcacheを利用している。テストで使用した際にはehcacheについてはレプリケーション等の設定は行っていない。
再度、同じように負荷をかけてみた。そのときの結果はこれ(GSPなし)。
$ ab -c 300 -n 30000 http://localhost:8080/pagetest-0.1-c/test01 This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright 2006 The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 3000 requests Completed 6000 requests Completed 9000 requests Completed 12000 requests Completed 15000 requests Completed 18000 requests Completed 21000 requests Completed 24000 requests Completed 27000 requests Finished 30000 requests Server Software: Apache-Coyote/1.1 Server Hostname: localhost Server Port: 8080 Document Path: /pagetest-0.1-c/test01 Document Length: 90 bytes Concurrency Level: 300 Time taken for tests: 73.788111 seconds Complete requests: 30000 Failed requests: 0 Write errors: 0 Total transferred: 8098725 bytes HTML transferred: 2700270 bytes Requests per second: 406.57 [#/sec] (mean) Time per request: 737.881 [ms] (mean) Time per request: 2.460 [ms] (mean, across all concurrent requests) Transfer rate: 107.17 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 401 2053.1 1 45024 Processing: 7 314 276.2 253 9336 Waiting: 6 299 264.1 245 9238 Total: 74 716 2091.4 263 45322 Percentage of the requests served within a certain time (ms) 50% 263 66% 301 75% 345 80% 394 90% 885 95% 3264 98% 4140 99% 9270 100% 45322 (longest request)
若干スループットが上がってるかも。誤差の範囲ともいえるが。プロファイラの結果で気が付くのは、
- コントローラの生成が遅い
- コントローラのgetProperty関連処理が遅い
ような気がする。