🍣

isucon11予選問題(1台構成の環境構築手順)

2023/05/06に公開

Vagrant+Virtualboxで環境構築

https://github.com/matsuu/vagrant-isucon/tree/master/isucon11-qualifier-standalone
基本的にここに記載の通りで構築できる。

  • 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
  • 画面アクセス: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の設定

"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 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