私は
Kodougu について語るとき、いつも「重い、遅い」と言っているのですが、ベンチマークをとったことはなかったので、手始めに AB(Apache に付属するベンチマークソフト)を使って速度を計測してみることにしました。
実行したコマンド
ab -n 100 -c 10 http://www.kodougu.net/rendering/diagram/1
計測したのは一番重くなると思われるモデリングツールを表示するページで、10 のコネクションで、合計 100 リクエストを送ることを試してみました。(もっとも、このベンチマークは、あくまでリクエストを送ってレスポンスを返すまでの時間を計測するものなので、たとえば、script タグで関連付けた外部 JavaScript ファイルの DL 時間などは計測できない・・・と思います。今は敢えてその辺を無視しています。)
ベンチマーク結果
Benchmarking www.kodougu.net (be patient).....done
Server Software: Mongrel
Server Hostname: www.kodougu.net
Server Port: 80
Document Path: /rendering/diagram/1
Document Length: 24522 bytes
Concurrency Level: 10
Time taken for tests: 22.140625 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 2479000 bytes
HTML transferred: 2452200 bytes
Requests per second: 4.52 [#/sec] (mean)
Time per request: 2214.063 [ms] (mean)
Time per request: 221.406 [ms] (mean, across all concurrent requests)
Transfer rate: 109.30 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 15 21 8.1 15 46
Processing: 516 2145 2189.3 1390 11765
Waiting: 421 2025 2163.7 1281 11640
Total: 531 2166 2188.7 1421 11796
Percentage of the requests served within a certain time (ms)
50% 1421
66% 2046
75% 2453
80% 2671
90% 5453
95% 7062
98% 10031
99% 11796
100% 11796 (longest request)
サーバは Mongrel となっていますが、間に Apache Proxy が挟まっています。秒間 4.52 リクエストを処理することができるようです。これは、あくまで Web にあげているバージョンで、ローカルで動作させている最新版はさらに重くなっていて、この半分くらいの性能しか出ません。まだ分析していないので、回線、Web アプリ(Rails)、DB(MySQL)のどれがボトルネックになっているのかはわかりません。
まあ、ユーザが少ないうちは、この程度の処理能力でも問題ありません。でも、100 ユーザくらいが同時に使ったら、図を表示するだけで何十秒も待たされることになり、現実的に使えるものではなくなってしまいます。現在は、サーバは一台(CPU:Core2Duo/Mem:1GB)なので、サーバ台数を増やしていくという選択肢もありますが、アプリケーションだけでも 10 倍くらいは改善しないと使い物になりませんね。
機能拡張が落ち着いたら、パフォーマンス改善をしないとなー・・・。