isucon

ISUCON5 予選 part1

研究室有志によるISUCON勉強会 ISUCON部 の第1回資料です。

vagrant を使った環境構築

試しに ISUCON5 の予選を再現した環境を vagrant で動かしてみる。

競技用ウェブアプリの環境構築

git clone https://github.com/gky360/vagrant-isucon.git
cd vagrant-isucon/isucon5-qualifier
vagrant up image

http://192.168.33.10 が見られたらここまではok。

ベンチマーク用の環境構築

vagrant up bench
vagrant ssh bench
sudo su -l isucon

# 上で立てた競技用ウェブアプリに対してベンチマークを走らせる
./bench.sh 192.168.33.10

何もしない状態でとりあえず 271.2 点取れました。
ちなみに、ISUCON 5 本戦出場者の得点はみんな5桁とか6桁とかです。
http://isucon.net/archives/48475110.html

言語を golang に切り替え

基本的に以降のコマンドは vagrant ssh image した中で。

# 環境構築 (optional)
sudo apt-get install -y zsh vim tmux htop dstat

# isucon ユーザに変える
sudo su - isucon

# systemctl スクリプトの確認
ls -l /etc/systemd/system/

# 80 と 8080 で何か動いている
sudo lsof -i :8080

# 実はこの vagrant はデフォルトで ruby 版の実装が動いている
systemctl status isuxi.ruby.service

# ruby 版webapp停止
systemctl stop isuxi.ruby.service
systemctl disable isuxi.ruby.service
sudo lsof -i :8080

# golang 用環境設定
echo "export PATH=/home/isucon/.local/go/bin:$PATH" >> ~/.bashrc
echo "export GOROOT=/home/isucon/.local/go" >> ~/.bashrc
echo "export GOPATH=/home/isucon/webapp/go" >> ~/.bashrc
exec -l $SHELL

# go build
cd ~/webapp/go
go build app.go
go run app.go

# golang のサーバに切り替え
systemctl start isuxi.go.service
systemctl status isuxi.go.service
sudo lsof -i :8080

なにも log がでなくて不安なので、出るようにする。
https://github.com/gorilla/mux の Middleware のところを参考に loggingMiddleware を足す。