🍣
isucon11予選問題(1台構成の環境構築手順)
Vagrant+Virtualboxで環境構築
基本的にここに記載の通りで構築できる。
- vagrant + virtualboxをインストール
- vagrantファイルに以下を追加
ホスト側のブラウザからアクセスできるようにポートフォワードを設定
config.vm.network "forwarded_port", guest: 443, host: 10443
config.vm.network "forwarded_port", guest: 5000, host: 5000
デフォルトのままだとapt-get updateでこけたので以下をprovisionに追加
echo nameserver 8.8.8.8 >> /etc/resolv.conf
※VMのcpu/memoryを変えたいときは以下を追加する
vb.memory = "8192"
vb.cpus = 4
- vagrantの起動/停止
- VM起動:
vagrant up
- VMにssh:
vagrant ssh
- ISUCONDITIONにアクセス:
https://localhost:10443/
- VM停止:
vagrant halt
- VM起動:
- 画面アクセス:https://localhost:10443/
alp(nginxのログ解析ツール)設定
- インストール
wget https://github.com/tkuchiki/alp/releases/download/v1.0.12/alp_linux_amd64.tar.gz`
tar -xvf alp_linux_amd64.tar.gz
sudo install alp /usr/local/bin/alp
- /etc/nginx/nginx.confの修正
log_format ltsv "time:$time_local"
"\thost:$remote_addr"
"\tforwardedfor:$http_x_forwarded_for"
"\treq:$request"
"\tstatus:$status"
"\tmethod:$request_method"
"\turi:$request_uri"
"\tsize:$body_bytes_sent"
"\treferer:$http_referer"
"\tua:$http_user_agent"
"\treqtime:$request_time"
"\tcache:$upstream_http_x_cache"
"\truntime:$upstream_http_x_runtime"
"\tapptime:$upstream_response_time"
"\tvhost:$host";
access_log /var/log/nginx/access.log ltsv;
- nginxの再起動
sudo sysemctl restart nginx
- alp実行
cat /var/log/nginx/access.log | alp json --sort sum -r
pt-query-digest(スロークエリログの解析ツール)設定
- mysqlの設定
webapp/sql/0_Schema.sqlにスロークエリログの出力設定を追加
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
SET GLOBAL long_query_time = 0;
- pt-query-digestのインストール
sudo apt install percona-toolkit
- pt-query-digest実行
pt-query-digest /var/log/mysql/slow.log
VSCodeの設定
- vscodeからVM上のファイルを編集できるように設定
https://qiita.com/yamashin0616/items/87e042b3f5ec52e57017 - vscodeのsetting.jsonの以下をtrueに変更
"remote.SSH.enableRemoteCommand": true
- .ssh/configに以下を追加
//ssh時にisuconユーザに切り替える
RemoteCommand sudo -i -u isucon
//isuconユーザでgoplsをインストール
go install -v golang.org/x/tools/gopls@latest
- goをデバッグするための設定
https://future-architect.github.io/articles/20201117/
go install github.com/go-delve/delve/cmd/dlv@v1.6.1
setting.jsonに以下を追加
"launch": {
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}",
"env": {
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": 3306,
"MYSQL_USER": "isucon",
"MYSQL_DBNAME": "isucondition",
"MYSQL_PASS": "isucon",
"POST_ISUCONDITION_TARGET_BASE_URL": "https://isucondition-1.t.isucon.dev"
},
"args": []
}
],
"compounds": []
}
→これで、デバッグモードでgoを実行できるようになる
ビルドと再起動
go build -o isucondition .
sudo systemctl restart isucondition.go.service
gitの設定
cd ~/.ssh
ssh-keygen -t rsa
>>id_rsa.pubをgitに登録
git config --global user.email ""
git config --global user.name ""
Discussion