かれ4

かれこれ4個目のブログ

第3回 チューニンガソン番外編 一人 チューニンガソン

今回からは運営側として参加のチューニンガソン


準備編

まず一番大変だったのが、テーマの決定
色々話しあって
erlangのtwoorlを暫定でテーマに
このtwoorlが曲者で動かすためには
yaws,ErlyWeb,erlangと難関が待ち構えています。
yaws,ElryWeb,erlangは行けるものの、
どうしても運営側の誰もtwoorlを動かすことに成功できず諦めました。
 
そのあと出てきたテーマがjavaCMS blojsom
これが今回のテーマです。

これを動かすまでも結構な苦労が。。。
tomcatをいじったことのない人達が何とか動かすところまでいけたので、とりあえずテーマは確定で
その間の試行錯誤(情報がやたら少ないand古いバージョン用のせいで)は大変でしたが、省略。
 
そして、計測の方法やなにやらを決めて、
実際に自分でチューニングしてみて、チートの可能性を見つけることと、参考値を出すことに。

ひとりチューニンガソン編


まずはやはり裸の状態でベンチを取って、どの程度のスコアが出るのかを確認
その時に大体21位
これがどこまでチューニング出来るのか全くわからなすぎる状態。

ボトルネックがCPUで、Tomcat(Java)にいじる部分があることがわかりました。

そして再難関 tomcatなんていじったこと無いから
何をチューニングしたらいいのかさっぱりわからないということ。

となればまずやるべきことは、ベンチスクリプトがやることを、実際に手でやってみる。
自分でコメントを入れて表示してみることに。
表示も遅いが、ソレよりも書込が遅すぎる。
書込を早くすることが、今回の勝敗をわけるポイントになるだろうと予測
(実際に大会では書込のチューニングしていそうな人は1人だけでした。)

というわけでとりあえず、1回、2回と参加して身につけたチューニングデザインパターン(TDP)

「zero-DiskIO」を試してみる。 (とりあえずメモリに載せる)

MySQLから

mv /var/lib/mysql /var/lib/mysql.bak

とやっておいて
MySQLの起動スクリプトには

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

googletomcat チューニングやらを調べて
maxThreadとかを設定することに、
今回の計測の条件を確認して、10並列と。
ならばmaxもmin も10よりちょっと多い12に。

ココからは、チューニングデザインパターン 「CPU全部使いきろうぜパターン」の登場

tomcatmysqlのCPU使用のバランスを見ながら
niceの値を調整していく簡単なお仕事

tomcatに-20つけてもmysqlの動作が遅くなるので、スコアは上がらない。

ちょうどバランス良くtomcatmysqlが動いてくれる最適な値を探していく。

renice と ベンチを繰り返すこと数回
これを試していく過程で最高値が66.190 この時のniceは-12

もうこれでいいやと思いながらも
一応 -1 〜 -20 までの全部の値で試してみる。


で結局-12に落ち着けて、おしまい。
http://img.tombo.ne.jp/mushikago000/71c4bf67-24de-4d86-bf21-3873e1af0f5f.jpg

開始30分後位からだけれども、スコア履歴は
http://batch.magcot.jp/testTune.html
こちらで確認出来ます。
 
5時間弱の孤独なチューニングのレポートでした。

 

当日編(裏話)

当日は腰(背中)が痛くて椅子に座り続ける事が出来ず、フラフラして写真とったり、地べたに寝っ転がったり。
でも、隣お座りになられたスポンサー様(@kenTamagawaさま)が、チューニングやりますと言い出し、サーバを用意。

SSHつなぐ所で、中断(挫折??)し、
インスタンスタイプ上げましょう。」
という爆弾発言。


そこで問題が、今回のチューニンガソンで使用していた、インスンタンスが32bit
そしてご所望のインスタンスタイプは64bitしかない
ということで、急遽 64bitで環境を作り直し。

他の参加者の5ECUに対して20ECUのインスタンスだから
スコアも4倍出るといういい感じの結果を出しました。
一時、計測結果画面にずば抜けたスコアが出て、焦って、
みんなと同じサーバにIPを付け直し(Floating IPパターン) スコアを低めに


それをスポンサートークで活かす辺りはさすがのエヴァンジェリストでした。

その時の資料は http://www.slideshare.net/kenTamagawa にアップロードされるかもしれません。