🪑
ISUCON環境構築(一人チーム版)
はじめに
素敵な夜ですね。自分用のISUCON環境構築を記す。これはサバイバルナイフに近いものであってもっとリッチな環境があるのかもしれないが、一人で数万を目指すには必要十分なもののはずだと信じている。
sshの入り方
vscodeを使う。
git
一人なのでgithubリポジトリは要らない。焦ると失格の元にもなる。
cd webapp
git init
# gitignoreを適切に追加しまくる
git add .
git ls-files
git commit -m "first commit score9999"
スクリプト
シェルスクリプトはよくわからないので、全てbashrcで行う。
alias brefresh="source ~/.bashrc"
alias alp="sudo ~/bin/alp ltsv --file=/var/log/nginx/access.log -r -m '\
/api/hoge/[0-z]+,\
'"
alias alpsum="alp --sort=sum"
alias alpavg="alp --sort=avg"
alias nginxconfig="sudo vim /etc/nginx/nginx.conf"
alias nginxrefresh="sudo mv /var/log/nginx/access.log /var/log/nginx/access.log.`date +%m%d%H%M` && sudo systemctl restart nginx.service"
alias isuapprefresh="sudo systemctl daemon-reload && sudo systemctl restart isuapp.service"
alias isuapplog="journalctl -u isuapps.service -n 30"
alias mysqlrefresh="sudo mv スロークエリログ スロークエリログ.`date +%m%d%H%M` && sudo systemctl restart mysql.service"
alias ptq="sudo pt-query-digest スロークエリログ" # なお結果がblobを含む場合はptq > logなどとする
alias isurefresh="mysqlrefresh && nginxrefresh && isuapprefresh"
top
別bashに表示して、見ながらベンチマークを回す。見忘れていたらもう一回ベンチマークを回す。
top
alp
アクセスログ集計ツール。ベンチマークごと毎回確認。
ダウンロードから起動まで
cd local/binかどこかにでも
wget alpのバイナリURL
tar(tar -zxvf file.tar.gz)かunzipかgzip(gzip -d file.gz?)か何か
bin/alp
Nginxの設定を変更しalpを使えるログの形式にする。
sudo vim /etc/nginx/nginx.conf
ltsvの設定を追加、ログ設定もltsvに書き換える(スペースltsvを追加する)。
bin/alp ltsv --file=access.log
pt-query-digest
便利なスロークエリ集計ツール。ベンチマークごと毎回確認。
インストール
sudo apt update
sudo apt install percona-toolkit
pt-query-digest --version
MySQLでスロークエリを記録する設定
mysql --help | grep my.cnf
# mysqlのconfファイル
[mysqld]
slow_query_log=1
long_query_time=0.001
sudo systemctl restart mysql # 反映完了のはず
sudo mysql
show variables; # 確認
pt-query-digest log(保管場所はおそらくvariablesにそのまま載っている)
他方pt-query-digestはmysql専用っぽい雰囲気がある。他DBへの準備はない。ISUCON12ではsqliteの実装にログ機能がついていたようで、JSONをdsq等のツールで集計できたようだ。
ほか
特に使っていない。
おわりに
技術の話に飢えており、ぜひmisskeyフォローお待ちしております。@kisihara_c@misskey.cloud
twitterは今あまり見ていませんが、フォローいただけると喜びます。@kisihara_c
Discussion