# iscon9の練習環境 ip: `34.84.118.183` hostname: `isucon.akky.me` 公式マニュアル: http://isucon.net/archives/53805209.html 公式GitHub: https://github.com/isucon/isucon9-qualify ## ログイン ``` bash $ ssh akky@isucon.akky.me ``` ログインしたら初期パスワードが`$HOME/*_password`にあるのでパスワードを変えてください ## 練習環境のディレクトリ ``` bash $ cd /home/isucon/isucon9-qualify/ $ direnv allow ``` - [direnv](https://github.com/direnv/direnv)を使ってGO_PATH等を設定しているので、direnvに`direnv allow`してと言われたらしてください - シェルをbashから変えた場合は[ここ](https://github.com/direnv/direnv/blob/master/docs/hook.md)を見て設定してください - `webapp/`ディレクトリ内のアプリケーションを改善する ## アプリケーションの起動 ### Go ``` bash $ cd webapp/go $ make $ ./isucari ``` ### Python ``` bash $ cd webapp/python $ ./venv/bin/activate $ python app.py $ deactivate # 仮想環境から抜ける ``` ### Python (gunicorn) ``` bash $ cd webapp/python $ ./venv/bin/activate $ gunicorn app:app --workers=30 --bind localhost:8000 $ deactivate # 仮想環境から抜ける ``` 8000ポートでアプリケーションが立ち上がる ## ベンチマーク アプリケーションを起動した状態で ``` bash $ ./bin/bemchmarker ``` 初期値は ``` go 2020/07/08 12:10:40 main.go:180: === final check === 2020/07/08 12:10:40 main.go:212: 2410 0 {"pass":true,"score":2410,"campaign":0,"language":"Go","messages":[]} python 2020/07/08 12:08:06 main.go:180: === final check === 2020/07/08 12:08:06 main.go:212: 2010 0 {"pass":true,"score":2010,"campaign":0,"language":"python","messages":[]} python (gunicorn) {"pass":true,"score":2510,"campaign":0,"language":"python","messages":[]} ``` Goのほうがスコアが高い gunicornで30ワーカー実行する設定にしたら、pythonのほうが高くなった Goも複数ワーカーでサーバーを走らせればスコアが上がる? https://medium.com/building-the-system/gunicorn-3-means-of-concurrency-efbb547674b7 `worker * thread = (2*CPU)+1`に設定するのが良いらしい https://qiita.com/kzbandai/items/159af44a459106782ed1 I/O, メモリ, CPUの利用率でworker, threadの数を変えるといいらしい 今回はworker数を大きくしたらスコアが良くなった ベンチマーク中`top`でプロセスを見てみると、mysqldの利用率がかなり大きい ## コード管理 - GitHubを使います https://github.com/isucon-ophiuchus/iscuon9practice - 本番もgitを使うことになると思うので、練習のために使いましょう - 各々自分の名前のブランチを切って作業してmasterにマージすればいい感じ? - 同時にディレクトリをいじれないので、ディレクトリは複製する? ## その他 - 計算機はGCPの無料枠を使って借りているので自由に使ってください - スナップショットを取っているので、こわれてもだいじょうぶです - アプリケーションはポートフォワーディングして見れます ``` bash $ ssh -fNL 8000:localhost:8000 akky@isucon.akky.me # ブラウザで localhost:8000 にアクセス ```