散乱してたISUCONで使ったコマンドチートシートをまとめておく
ツール入れる編
NETDATA
インストール
$ bash <(curl -Ss https://my-netdata.io/kickstart.sh)
スタート・ストップ
To stop netdata run: $ systemctl stop netdata To start netdata run: $ systemctl start netdata
解析編
アプリケーションログを見る
goのバイナリファイルがあるサーバーで
$ journalctl -fxu isuumo.go
f: tail -f
的な
x: 詳細情報
u: -u ユニット名
kataribe
kataribeでアクセスログを集計する
$ sudo cat /var/log/nginx/access.log | ./kataribe
kataribe grouping
[[bundle]] regexp = '^(GET|HEAD) /recent/[0-9]+\b' name = "get recent" [[bundle]] regexp = '^GET /api/contestant/notifications?.*' name = "get /api/contestant/notifications?after="
db編
テーブルの調査
SELECT COUNT(*) FROM テーブル名; show columns from テーブル名;
index貼る
CREATE INDEX インデックス名 ON テーブル名 (カラム名[, カラム名…]) # force index SELECT * FROM t1 USE INDEX FOR JOIN (i1) FORCE INDEX FOR JOIN (i2); # 貼れてるか確認 explain SQL;
pt-query-digest
サーバー上で
# 権限問題により/home/isuconに移動してる $ sudo cp /var/log/mysql/mysql-slow.log /home/isucon/mysql-slow.log $ chown isucon mysql-slow.log
ローカルで
$ scp isucon-app2:mysql-slow.log . $ pt-query-digest mysql-slow.log > pt-query-digest.txt
mysqlの外からsql叩く
$ mysql -uユーザー名 -pパスワード -e "SQL"
LIMIT OFFSET BETWEEN ANDの入れ替え作業
LINIT 取得数 OFFSET 取得開始位置 BETWEEN 以上 AND 以下
動的プレースホルダを使ってmysql負荷を下げる
interpolateParams=true
を設定する
Makefile編
.PHONY: gogo kataribe slow-log gogo: sudo systemctl stop h2o sudo systemctl stop torb.go sudo systemctl stop mariadb sudo truncate --size 0 /var/log/h2o/access.log -sudo truncate --size 0 /var/lib/mysql/mysql-slow.log make -C app/webapp/go build sudo systemctl start mariadb sleep 2 sudo systemctl start torb.go sudo systemctl start h2o sleep 2 ./app/exec_bench.sh $(MAKE) kataribe kataribe: sudo cat /var/log/h2o/access.log | ./kataribe slow-log: sudo mysqldumpslow -s at -t 10 /var/lib/mysql/mysql-slow.log