2015年9月29日火曜日

ISUCON5に参加してきた

1.はじめに

isucon5に参加してきた。
isuconへの参加は今回で3回目で、毎年予選落ちなので今年こそは!と、チームで事前勉強会を開いたりしたけど、結局予選落ちだった。。。

2.事前勉強

事前勉強会ではisuconの勝ち方で勉強しながら、過去問をやって本番での方針を固めてた。
isuconの勝ち方をみて、h2oを使おうとインストールスクリプトを準備したりしたけど、
当日のアプリをみると、getしてるファイル数が少ないのであんまりメリットないかな?と思って、nginxのままで行くことにした。

3.当日

当日設定した内容は、以下のとおり。
私はインフラ(OS,ミドルウェア)担当で、アプリはいじっていないので、その辺はここには記載しない。

-静的ファイルをnginxで返す
-nginxとアプリ間をunix domain socketでつなぐ
-アプリのworker数を1から8に増やす

これで、初期スコア役70が、1800程度まで上がった。
この時にベンチかけてる時にmysqlのCPU使用率が300%越えしてたので、
mysqlのチューニングのため、my.cnfを触ってたが再起動しても設定が反映されない事態が発生。。。
いろいろ調べると、/etc/my.cnf以外にも読み込むpathがあるので、そっちにも書きてみたが
反映されず。。。
結局原因がわからないまま、時間切れ。

4.あとがき

終わった後でIdobataを覗いたら、AppArmorのせいでらしいとの情報が。。。
SELinuxみたいなプログラムらしいけど、まだ何者かは調査していないので、
後で調べることにする。

最終的には別メンバがやってたアプリの修正を入れて、最終スコアは約2000で終了。

今回も予選通過ラインには全く届かなかったけど、年々スコアは伸びてるので、
来年こそは!!!


2015年1月6日火曜日

実践機械学習システム

時は西暦2015年。。。

去年はnode.jsやってみたり、edison買ったり、ラズベリーパイ買ったりと(ブログには書いてませんが)色々とやりましたが、今年は機械学習に手を出すことにしました。
オライリーの「実践  機械学習システム」を購入したので、読んだ感想とか、個人的なメモを書き記すことにします。


とりあえず、一章は読み終わりましたが、pythonとそのライブラリの使い方でしたので、
特に書くことはありません。
pythonは初めてなので色々なれませんが、なんとか読み進めていこうと思います。

以上

2014年7月9日水曜日

Webnotificationsで通知領域を表示する時間を設定する。


Webnotificationsを使えば、何かイベントが発生したときに、通知領域にメッセージを表示させる事ができる。
Socketo.ioと合わせて使うと、Webアプリでイベントが発生した事をすぐにユーザに通知する事ができる。
例えば、以下のような感じで。

            socket.on('get_msg', function(data){
                notification = new window.Notification(data.name,{
                    body: data.msg
                });
            });

この記述では、socket.ioでget_msgを受信した時に、通知領域に受け取ったdata.nameとdata,msgを表示する用になる。
ただ、このままだと表示された通知が5秒くらいで、自動で消えてしまった。(safari7とFirefox30で確認)
setTimeoutを使えば通知を表示する期間を調整できるみたいなので、1秒後に通知が消えるように修正すると以下のようになる。

socket.on('get_msg', function(data){ notification = new window.Notification(data.name,{ body: data.msg }); setTimeout(function(){ notification.cancel(); },1000); });

setTimeoutの1つ目の引数で実行する処理を記述する。今回は通知を閉じる処理を記述した。2つ目の引数で実行するまでの待ち時間をmsで記述する。
この記述だと、1000ms後(1秒後)に通知を閉じる処理が走る。
実行してみたところ、Safari7では1秒後に通知が消えたが、Firefox30では、setTimeoutを指定していないのと同じ時間が経過後に、通知が消えた。
また、待ち時間を5000ms(5秒)以上の値にしても、通知の表示時間が延びる事は無かった。
ここにも記載があるが、そもそも通知をブラウザが自動で閉じるのは、Webnotificationsの仕様に従ってないようで。。。
https://developer.mozilla.org/ja/docs/WebAPI/Using_Web_Notifications
便利な機能だけど、まだまだブラウザによって実装がまちまちな感じ。

2013年9月17日火曜日

第6回ITインフラ勉強会@福岡の振り返り

第6回ITインフラ勉強会@福岡に参加してきました。
では、OS、DB、APとバラバラにチューニングしたので、何が効いてて
何が効いていないのかいまいち分からなかったので、
awsを使って確認してみました。
サーバは「「ISUCON 夏期講習」のサーバ環境のつくりかた
を参考にさくさくと作成。

まずはデフォルト状態でのスコアとCPU使用率を確認すると
CPU使用率:200〜300%

606 ticketsscore:811084

mysqlがかなりCPUを使っている。

で、勉強会で設定したmy.cnfを投入してベンチマークを実行すると、
CPU使用率85〜120%

1017 tickets
score:483295


となった。
デフォルトでmysqlがかなりCPUを使っていたので、
まずはmysqlのチューニングが効いてるのかな。
MySQLTunerに言われるがまま設定すると、この程度。

今日はここまで。

2013年9月8日日曜日

第6回ITインフラ勉強会@福岡に参加してきました。

第3回ISUCONに向けて、第6回ITインフラ勉強会に参加してきました。
開催内容は、ISUCON夏期講習のAMIで黙々とチューニング!

前回参加したチューニンガソンとの違いは、APの改修がOKなこと。
13:00から開始で、まずは自己紹介と前回のISUCONに参加された方から、
ISUCONの概要の説明の後、2チームに別れてチューニングを開始。

3人チームで分担を、OS、DB、APと分けて、黙々とチューニングしました。
私はAPはよく分からないので、詳しそうな方におまかせして^^;
DBのチューニング担当になりました。
MySQLは前回のチューニンガソンで1度触っただけですが、
その時の知識を思い出しながら、作業開始。

APはチケット販売サイトで、その性能を競います。
最初に素の状態でベンチマークを実行すると、以下のようになりました。


606 tickets
score:811084

ticketsの値は大きい方が、scoreの値は小さい方が高得点だそうです。

まずは、というかほとんどこれしかやってないんですが、
MySQLTunerを使って計測開始。これは前回のチューニンガソンで
仕入れた知識。
MySQLTunerに言われるがままに、cacheやbufferの値を設定。
それから、slowlogに出てくるqueryをexplainで確認して、
indexを貼ってみたけど、indexはよく理解できていないので、
本番までに勉強しておきます。

最終的に設定した値は、以下のとおり。

query_cache_size = 512M
query_cache_type = 1
query_cache_limit = 8M
table_cache = 256

join_buffer_size = 256
thread_cache_size = 256M

#slow_query_log
#long_query_time = 0.1

indexは忘れましたw

OS担当とAP担当の方も色々調整をされて、最終的なベンチマーク結果は、、、


1161 tickets
score:423350

約2倍のチケットをさばけるようになってました。
優勝チームは5500ticket  83474ticketだそうです。。。

今回は、OS、DB、APと思い思いに黙々とチューニングしたので、
どこの改修が効いたのか解らず・・・
本番では最初の方針と、途中経過を確認しながら進めた方が良さそう。

最後にチーム毎にチューニング内容を発表して、お開きとなりました。
仕事だとApache、Tomcatが多いので、
お進めのAPサーバなど、色々知らない事が聞けて参考になりました。

ISUCONに参加された方の話だと、インフラ周りのチューニングよりも
APのプログラム改修の方が効果が高いようです。
インフラ担当としてはAPを触らずにどこまでチューニング可能かが
興味のあるところです。

長い割に、内容が無いですがこんなところで。

2010年9月20日月曜日

Solaris on Virtualbox

今、Solaris on VirtualBox on Mac mini(intel)な環境が有る。

以前からそうだったんだけど、なぜかSolarisから外部ネットワークに接続できない。
VirtualBoxのネットワークの設定はNAT、Solaris側の設定はDHCPでやってる。
色々調べてみると、SolarisのDHCPクライアントはDNSを設定してくれないみたい。
なので、ここを参考に設定してみた。
設定変更後に再起動して、無事Firefoxからgoogleが見えた。

これで問題解決。。。のはずが、/etc/resolv.confを見ると、設定したnameserverの値が変わっている。
設定したnameserverは10.0.2.3。それが192.168.1.1に変わっている。
IPアドレスは10.0.2.15。
PINGは192.168.1.1からは応答があるが、10.0.2.3からは応答無し。

よくわからんけど、しばらくこのままにしておく。
必要なファイルのDLが終わったら、また考える。


2010年5月30日日曜日

初投稿

ブログを始めました。主に備忘録として使う予定。