あらすじ
エントリーしたんですが所用により参加できませんでした。 というわけで自習をしたいと思いましたがベンチマークの動かし方でちょっと迷ったのでメモしておきます。
動作環境
% sw_vers ProductName: Mac OS X ProductVersion: 10.10.5 BuildVersion: 14F27 % java -version java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) % ruby -v ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0] % mysql --versiond mysql Ver 14.14 Distrib 5.6.20, for osx10.9 (x86_64) using EditLine wrapper
環境構築
https://gist.github.com/tagomoris/1a2df5ab0999f5e64cff
- 新しいイメージの作成(2分程度)
- インスタンスの作成(1分程度)
以下のようなコマンドでインスタンス内にログインできることを確認します。パラメータは適宜置き換えて下さい。
% gcloud compute --project isucon5-xxxx ssh --zone asia-east1-a instance-1
すでにアカウント持っていて GCP 使ったことある人なら5分程度でここまで作業終わると思います。
あとは外部公開されている IP をブラウザで開いて画面が表示されれば OK です。
ベンチマーク
どうやらベンチマークは以下の操作で実行できそうです。
- gcp に isuxi アプリを起動する
- 手元にある MacOSX 上でベンチマーク用の Worker である bench/agent.rb を起動する
- 手元にある MacOSX 上でベンチマーク用の Worker である eventapp/update_scores.rb を起動する
- 手元にある MacOSX 上でベンチマーク用の WEB アプリである eventapp/app.rb を起動する
- 起動したベンチマーク用のポータルサイトから benchmark request を submit する
isucon5/bench
macosx 上で java8 をインストールする方法は割愛します。 よくわからない方はこの辺りを参考にして下さい。
http://qiita.com/vicugna/items/99ed473751cfb808e860
以下の操作が問題なく実行できればOKです。
% git clone https://github.com/isucon/isucon5-qualify.git % cd isucon5-qualify/bench % gradle compileJava % gradle run :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :run reading stdin > Building 75% > :run
この状態は java プログラムが標準入力を待ち受けています。これは bench/agent.rb で使用されます。これは動作確認ですので Ctrl-C でこのプログラムを終了してください。
次に bench/agent.rb を起動します。まずは必要な ruby モジュールを install します。
% cd isucon5-qualify % bundle install --path vendor/bundle --binstubs=vendor/bundle/bin
bench/agnet.rb を実行します。
% bundle exec ruby agent.rb
ただし、このプログラムには MySQL の接続先が ISUCON5 用にハードコーディングされています。ローカルの MySQL を使用するために以下のように修正します。
-MANAGER_ADDRESS = "104.155.221.244" -MANAGER_USER = "portalsan" -MANAGER_PASSWORD = "tony-morris" +MANAGER_ADDRESS = "localhost" +MANAGER_USER = "root" +MANAGER_PASSWORD = ""
mysql に root でパスワード無しで入れる方はこれを参考にしてください。そうでない方は適宜変更をお願いします。
isucon5/eventapp
次にベンチマークを実行するポータルサイトを起動させます。こちらも設定がハードコーディングされている箇所があるので修正する必要があります。
先ずは DB を作成
% cd isucon5/eventapp % mysql -u root < sql/schema.sql
その DB に team, testset 格納します。teams.tsv を作成し、DB にセットします。 DB の接続先は team_load.rb に記述されていますので、必要な方は適宜変更してください。
% echo "'isucon-team'\t'isucon-password'\t'your@email.account'\t1" > teams.tsv % bundle exec ruby team_load.rb teams.tsv testsets.json
次に pid の置き場所を作成します。
% cd isucon5/eventapp % mkdir -p /tmp/isucon/isucon5-qualify/eventapp % sed -i -e 's/home/tmp/g' unicorn_config.rb
この web アプリは現在時刻から isucon 開催期間内でないとサービスに制限がかかりますのでそれを解除します。
diff --git a/eventapp/app.rb b/eventapp/app.rb index a95ccf1..1f087f5 100644 --- a/eventapp/app.rb +++ b/eventapp/app.rb @@ -80,21 +80,11 @@ class Isucon5Portal::WebApp < Sinatra::Base end def in_game?(team) - now = Time.now - case team[:round] - when 1 then SATURDAY_GAMETIME.first < now && now < SATURDAY_GAMETIME.last - when 2 then SUNDAY_GAMETIME.first < now && now < SUNDAY_GAMETIME.last - when 0 then true - end + return true end def active_team?(team) - now = Time.now - case team[:round] - when 1 then SATURDAY.first < now && now < SATURDAY.last - when 2 then SUNDAY.first < now && now < SUNDAY.last - when 0 then true - end + return true end
web アプリを起動します。
% bundle exec unicorn -c ./unicorn_config.rb
最後にこの Web アプリでベンチマーク実行のキューを監視するワーカーを起動させます。
% bundle exec ruby update_scores.rb
動作を確認する
ブラウザでポータルサイトを開き、必要な設定を終えたら Request benchmark を submit すれば動作するはずです。デフォルトだとスコアが 75 とかになると思います。