# 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 にアクセス
```