ISUCONのハンズオン会~claat~
id: Work1 summary: Work1 categories: matsuri-isucon environments: Web status: Published
このワークでは、以下のことを学びます。
ログインボタンから、ログイン画面に遷移します。
ユーザーを作成してみましょう!
作成に成功すると、ログアウトボタンの上にユーザー名が表示されます。
実際にサーバーに SSH 接続して、サーバーの中身を見てみましょう。
Host private-isu1
HostName [User]([[.Team.App1]])
IdentityFile ~/.ssh/id_rsa
User isucon
Host private-isu2
HostName [User]([[.Team.App2]])
IdentityFile ~/.ssh/id_rsa
User isucon
Host private-isu3
HostName [User]([[.Team.App3]])
IdentityFile ~/.ssh/id_rsa
User isucon
Host private-isu-bench
HostName [User]([[.Team.Bench]])
IdentityFile ..ssh/id_rsa
User isucon
上の config を~/.ssh/config に追記しましょう。
ssh private-isu1
で接続することができます。
もしくは、ssh isucon@[User]([[.Team.App1]])
で接続することができます。
ISUCON では、ベンチマークの点数を競います。 ベンチマーク用のインスタンスから、競技用のインスタンスに向けてベンチマークを回します。 早速ベンチマークを回してみましょう!
ベンチマーク用インスタンス
/home/isucon/private_isu.git/benchmarker/bin/benchmarker -u /home/isucon/private_isu.git/benchmarker/userdata -t
http://User
ベンチマークが終わるまで、約一分かかります。
今回の、private-isu では初期状態で点数が 0 点であることもあります。(アプリがそもそも遅すぎるから)
スロークエリログは、クエリの中で遅いクエリを集計したログです。 スロークエリログの解析ツールは、たくさんあります。
今回は、pt-query-digest を使用して、スロークエリログを解析します。
mysqld.cnf に スロークエリログの設定を入れます。
ベンチを再度動かすと、スロークエリログの集計ができます。
集計開始
comments が重そう。。。
pt-query-digest では、comments が重そうでした。 MySQL にインデックスを貼ってみましょう!
CREATE INDEX comments_index1 ON comments (post_id, created_at desc);
もう一度、ベンチマークを回してみましょう!
0 点から、19000 点まで上がりました!
また、スロークエリの結果も変わりました。
comments でなく、posts が上位に来るようになりました。(ここもインデックスを貼ると改善されます)
id: Work2 summary: Work2 categories: matsuri-isucon environments: Web status: Published
このワークでは、以下のことを学びます。
app1 台、db1 台にするためには、以下の手順を踏みます。
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
flush privileges;
skip-grant-tables
CREATE USER "isuconp"@"52.194.191.15" IDENTIFIED BY "isuconp";
sudo systemctl stop isu-go
sudo tee /etc/systemd/system/isu-go.service >/dev/null <isu-go.service
sudo systemctl daemon-reload
sudo systemctl start isu-go
[Unit]
Description=isu-go
After=syslog.target
[Service]
WorkingDirectory=/home/isucon/private_isu/webapp/golang
EnvironmentFile=/home/isucon/env.sh
Environment=RACK_ENV=production
PIDFile=/home/isucon/private_isu/webapp/golang/server.pid
Environment=MYSQL_DRIVER_POSTFIX=:logger
Environment=SQL_LOGFILE=/tmp/sql.log
Environment=CPU_PROFILE_FILE=/tmp/cpu.pprof
User=isucon
Group=isucon
ExecStart=/home/isucon/private_isu/webapp/golang/app -bind "127.0.0.1:8080"
ExecStop=/bin/kill -s QUIT $MAINPID
[Install]
WantedBy=multi-user.target
27400
点台まで、スコアが上がりました!