今回からは運営側として参加のチューニンガソン
準備編
まず一番大変だったのが、テーマの決定
色々話しあって
erlangのtwoorlを暫定でテーマに
このtwoorlが曲者で動かすためには
yaws,ErlyWeb,erlangと難関が待ち構えています。
yaws,ElryWeb,erlangは行けるものの、
どうしても運営側の誰もtwoorlを動かすことに成功できず諦めました。
そのあと出てきたテーマがjavaのCMS blojsom
これが今回のテーマです。
これを動かすまでも結構な苦労が。。。
tomcatをいじったことのない人達が何とか動かすところまでいけたので、とりあえずテーマは確定で
その間の試行錯誤(情報がやたら少ないand古いバージョン用のせいで)は大変でしたが、省略。
そして、計測の方法やなにやらを決めて、
実際に自分でチューニングしてみて、チートの可能性を見つけることと、参考値を出すことに。
ひとりチューニンガソン編
まずはやはり裸の状態でベンチを取って、どの程度のスコアが出るのかを確認
その時に大体21位
これがどこまでチューニング出来るのか全くわからなすぎる状態。
ボトルネックがCPUで、Tomcat(Java)にいじる部分があることがわかりました。
そして再難関 tomcatなんていじったこと無いから
何をチューニングしたらいいのかさっぱりわからないということ。
となればまずやるべきことは、ベンチスクリプトがやることを、実際に手でやってみる。
自分でコメントを入れて表示してみることに。
表示も遅いが、ソレよりも書込が遅すぎる。
書込を早くすることが、今回の勝敗をわけるポイントになるだろうと予測
(実際に大会では書込のチューニングしていそうな人は1人だけでした。)
というわけでとりあえず、1回、2回と参加して身につけたチューニングデザインパターン(TDP)
「zero-DiskIO」を試してみる。 (とりあえずメモリに載せる)
MySQLから
mv /var/lib/mysql /var/lib/mysql.bak
cp -r /var/lib/mysql.bak /dev/shm/mysql ln -s /dev/shm/mysql /var/lib/mysql
を追加
iotopで見ながら、ベンチを走らせてみると、diskioはほぼ0になったので、
ココからがtomcatのチューニング
とりあえず、server.xmlをいじるなんて事は頭に無いので、
自分が出来る所から
そう
起動スクリプト
/etc/init.d/tomcat6
こいつを見ていくと、途中で
/usr/sbin/tomcat6
なるファイルがあることを発見
こいつも見ていくと、よく見慣れたJavaの起動オプションが、、、
ここで大事な事を思い出す。tomcatってjavaじゃないか、Javaのチューニングなら出来るぞ。
あのクラウドが無かった時代のクローラチューニングしてた時代を思い出す
と、孤独にテンションアップ
って事で、ヒープやらなにやらを変更。
最小のメモリ量をがっつり使う。
最初のベンチでたいしたメモリを使ってないこともわかったので、
GCいらね
-Xnoclassgc
-server
もつけて、メモリも適当に沢山のっける
これの他に起動スクリプトに
/home/ec2-user/bench.sh -c 10 -s 60
というJITの為の無駄打ちを入れる。
あとはとりあえずsun java の7に入れ替えてみたり
この辺りではスコアは対して上がった気はしない。
そしてMySQLに戻り、書込に邪魔なものを取っていく。
インデックスが貼られていないクエリもあったけど気にしない。
それはreadに関するものであり、Writeに取ってはインデックスやら、外部キーなんて物は邪魔になるはず。
ならばインデックスなんて全て消してしまえ、
外部キー制約なんかはついてるだけで、書込が遅くなりそうだからとりあえず消してしまう。
ramdiskにのせてるし、読込の事は完全無視。
またもそもそと、tomcatをいじり始める。ついに未知の領域server.xml
googleでtomcat チューニングやらを調べて
maxThreadとかを設定することに、
今回の計測の条件を確認して、10並列と。
ならばmaxもmin も10よりちょっと多い12に。
ココからは、チューニングデザインパターン 「CPU全部使いきろうぜパターン」の登場
tomcatとmysqlのCPU使用のバランスを見ながら
niceの値を調整していく簡単なお仕事
tomcatに-20つけてもmysqlの動作が遅くなるので、スコアは上がらない。
ちょうどバランス良くtomcat とmysqlが動いてくれる最適な値を探していく。
renice と ベンチを繰り返すこと数回
これを試していく過程で最高値が66.190 この時のniceは-12
もうこれでいいやと思いながらも
一応 -1 〜 -20 までの全部の値で試してみる。
開始30分後位からだけれども、スコア履歴は
http://batch.magcot.jp/testTune.html
こちらで確認出来ます。
5時間弱の孤独なチューニングのレポートでした。
当日編(裏話)
当日は腰(背中)が痛くて椅子に座り続ける事が出来ず、フラフラして写真とったり、地べたに寝っ転がったり。
でも、隣お座りになられたスポンサー様(@kenTamagawaさま)が、チューニングやりますと言い出し、サーバを用意。
SSHつなぐ所で、中断(挫折??)し、
「インスタンスタイプ上げましょう。」
という爆弾発言。
そこで問題が、今回のチューニンガソンで使用していた、インスンタンスが32bit
そしてご所望のインスタンスタイプは64bitしかない
ということで、急遽 64bitで環境を作り直し。
他の参加者の5ECUに対して20ECUのインスタンスだから
スコアも4倍出るといういい感じの結果を出しました。
一時、計測結果画面にずば抜けたスコアが出て、焦って、
みんなと同じサーバにIPを付け直し(Floating IPパターン) スコアを低めに
それをスポンサートークで活かす辺りはさすがのエヴァンジェリストでした。
その時の資料は http://www.slideshare.net/kenTamagawa にアップロードされるかもしれません。