tl;dr
isucon.net
同僚の武川さんに声掛けて頂いて、「チーム初老丸」として初参加。参加チームの平均年齢だけであれば間違いなくダントツだったのではないか。
振り返り
どうだったのか(結果)
- とにかく遅い Web アプリケーションサービスを目の前にまったく歯が立たず泣いた
- 点数は書くのもはばかれる点数だったので泣いた
- 何をすればいいのかがパッと思いつかずに辛くて泣いた
- 雀の涙程のスキルやキャリアが全く役に立たずに泣いた
反省、感じたこと
- 事前準備は絶対に必要(過去問をやっておくなど)
- 調査用のコマンドはまとめておくべきだった
- インフラもアプリケーションもプロファイリング力が最も重要
- 「あー、ここにキャッシュを挟めば良さ気」と思っても実装を追加することが出来なかったのが辛かった
- ということで、アプリケーションの実装力必要(実装力とまではいかないけど、コードを読むチカラは必要だと思う)
- 各種参考実装は初期段階でスコアは出ないけど焦らない
- インフラ側で出来ることは限られているかもしれない(今回はほとんどインフラは触れず)
- systemd 慣れて無さすぎ
これからどうするか
- 今年の問題が公開されたら、改めて手元でチャレンジしてみる
- プロファイリングのチカラを付けたい
メモ、 当日得た知見等
systemd 関連
- chkconfig の代替
sudo systemctl list-unit-files -t service
- service xxxx [status|start|stop|restart] の代替
sudo systemctl status ${service} -l sudo systemctl [enable|disable] ${service} sudo systemctl [stop|start|restart|status] ${service}
- systemd ユニットファイルを修正した後
sudo systemctl daemon-reload
- systemd 配下のアプリケーションログ
sudo journalctl -f
Ruby 関連
- Rack アプリケーションのプロファイルには
rack-lineprof
が良かった String#gsub
よりもString#tr
が速かった- Gemfile の凍結方法
$ cat .bundle/config --- BUNDLE_FROZEN: "0" #=> 1 だと凍結 BUNDLE_PATH: "vendor/bundle" BUNDLE_DISABLE_SHARED_GEMS: "true"
Perl 関連
- Plack というフレームワーク
- Plack アプリケーションを unixsocket で起動する
carton exec -- plackup -s Starlet -p ${port_number} --max-workers=5 xxxxx.psgi carton exec -- plackup -s Starlet --listen /tmp/xxxxx.sock --max-workers=5 xxxxx.psgi
MySQL 関連
- テーブルの index 確認
SHOW INDEX FROM ${table};
- slow log
slow_query_log = 1 slow_query_log_file = /path/to/mysqld-slow.log long_query_time = 0 log-queries-not-using-indexes = 1
最後
来年は今年よりもスコアが取れるように頑張りたい。
参加された方々、お疲れ様でした。運営の皆様、大変お疲れ様でした。