タグ

ブックマーク / blog.nomadscafe.jp (26)

  • 「ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版」を公開しました - blog.nomadscafe.jp

    昨日のエントリで紹介した「Webアプリケーションの パフォーマンス向上のコツ 実践編」ですが、いくつかスライドを追加して、「完全版」として公開しました。 ISUCONだけに限らず、一般的なWebアプリケーション、SQLのチューニングの参考となる資料となっていると思いますので、見て頂けたら嬉しいです。 <追記> ISUCON4 オンライン予選の参加登録が開始されています!!!Webアプリケーションを書いている方もインフラを扱っているエンジニアも運用エンジニアも、ぜひチャレンジしてください!!私もでます!! 参加はこちらから↓↓↓↓ ISUCON4 オンライン予選の参加登録を開始しました \n\n\nISUCONだけに限らず、一般的なWebアプリケーション、SQLのチューニングの参考となる資料となっていると思いますので、見て頂けたら嬉しいです。\n\n## <追記>\n\nISUCON4 オン

  • YAPC::Asia 2010 Tokyo で CloudForecast について喋ってきた - blog.nomadscafe.jp

    Yokohama.pm で話したこと+αで、監視についての話、CloudForecastの概要とインストール方法、拡張方法、また生成するグラフの見方、運用方法について紹介しました。 slideshare版の資料にはありませんが、発表で使った資料の最後はShibuya.pmの中継を見ていた息子です。去年の発表でも画像の縮小のサンプルにもつかってました^^ \n\n[Yokohama.pm](https://blog.nomadscafe.jp/2010/07/yokohamapm-6cloudforecast.html) で話したこと+αで、監視についての話、CloudForecastの概要とインストール方法、拡張方法、また生成するグラフの見方、運用方法について紹介しました。\n\nslideshare版の資料にはありませんが、発表で使った資料の最後はShibuya.pmの中継を見ていた息子

  • Shibuya.pm#14 で memcachedの運用について発表しました - blog.nomadscafe.jp

    2010夏のmemcachedシリーズもいよいよ最後となりました。 1歳8ヶ月のうちの息子も見ていた Shibuya Perl Mongersテクニカルトーク#14「IPAとJPAは違う団体です」でmemcachedの運用について発表をさせていただきました。今回は監視scriptの書き方やcronlog、Nagiosの設定tipsなどの内容にしました。memcachedの監視というよりかは一般的なノウハウ寄りだったかなと 監視の狭間問題の対策としてmemcachedのuptimeを見るscriptを紹介していますが、この問題はmemcachedには限りません。自動的に再起動してくるようなサービスで勝手に再起動した=何か問題が起きたと想定できる、例えばMySQLや /proc/sys/kernel/panic が設定されているLinuxにも同じような監視が必要になるでしょう。 MySQLであ

  • 株式会社ライブドアに入社しました - blog.nomadscafe.jp

    先月末にミクシィを退職し、6月1日より株式会社ライブドアにて働かせていただくことになりました。 出社日2.0日目的な意味で。 ライブドアには以前からの知り合いのエンジニアも多くいたり、先月にはJPAの代表の牧さんが(再)就職をしていたり、同日入社にはアノPerlエンジニアもいます。それぞれが高い技術をもっている楽しみな職場です。ライブドアでの主な業務内容は前職に引き続きシステム運用を見ることになります。 Blogをはじめとするlivedoorのメディア、サービスを運用やスケーラビリティといった立場から支えて行きたいと思いますので、これからもよろしくお願いします。

  • Plagger::Plugin::Aggregator::Async : blog.nomadscafe.jp

    Plagger::Plugin::Aggregator::Async Plaggerネタ YAPC::Asiaのikebeさんのプレゼンにも名前がでてきたHTTP::Asyncを使ったAggregator。 パラレルでFeedの取得ができるので、Simple使うより早い。Xangoより使うのが簡単。 まだ、Cache周りが不完全。 confに以下で使える plugins: - module: Aggregator::Async - module: Subscription::Config config: feed: - https://blog.nomadscafe.jp/ ソースは↓追記に張り付けた。

  • YAPC::Asia 2007でLTしてきました : blog.nomadscafe.jp

    YAPC::Asia 2007でLTしてきました YAPC::Asia 2007で、LTに出させていただきました。 ネタは以前書いた、同じコマンドを複数のサーバで実行です。 資料はこちら(pdf)です こういうノウハウ(小手先テクニック)はもっと共有されてもいいと思う。 便利な技があったらいろいろ教えてください。

  • Cache-Control: max-ageとSquid : blog.nomadscafe.jp

    Cache-Control: max-ageとSquid 「Cache-Control: max-age=秒数」が、クライアントからのリクエストにあった場合、キャッシュサーバの振る舞いは、『HTTPプロトコル(ソフトバンクパブリッシング・isbn:4797318333)』によると max-ageディレクティブのもう一つの目的は、クライアント側での使用を前提としたものです。クライアントは、リクエストにmax-ageディレクティブを含めることによって、指定した値より古くなければキャッシュされたオブジェクトを受け入れる用意があることを伝えます。キャッシュサーバが保持しているエントリが、クライアントが要求した経過時間より古い場合には、キャッシュサーバは、たとえオリジンサーバから受け取ったオリジナルのレスポンスの中で該当エントリーが以前有効であるべきと指示されていても、クライアントに対してはキャッシ

  • Shell::Perl と pirl を試してみる : blog.nomadscafe.jp

    Shell::Perl と pirl を試してみる id:naoya氏がブクマしてたのを見て入れてみた。 pirlは、perlshのような対話型のperlシェルです。 Shell::Perlをinstallしようとすると、新しいExtUtils::MakeMakerを要求されるので、cpanコマンドでいれずに、Makefile.PLを書き換えた -use ExtUtils::MakeMaker 6.31; +use ExtUtils::MakeMaker; 同時にinstallされるpirlコマンドを実行するとこんな感じ。 $ pirl [~] Welcome to the Perl shell. Type ':help' for more information pirl @> 1+1 2 pirl @> log 10 "2.30258509299405" pirl @> :helpでヘ

    nipotan
    nipotan 2007/08/13
  • デブサミ2007の発表資料 Nagiosのプラグインの話 : blog.nomadscafe.jp

    デブサミ2007の発表資料 Nagiosのプラグインの話 2月14日のデブサミの「出張Shibuyaイベント」でLTしてきました。 内容は、Nagiosのプラグインを作成する話と、nrpeの簡単な説明です。 発表資料:nagios.pdf プラグインを作る時には、exit時のステータスコードだけ気にすればいいので、 監視したいものがちょっと複雑なもの、例えばWWW::Mechanizeでログインしてほげほげするとかいう時でも難しくない。当たり前だけどPerlじゃなくても全然おk。 そういえば、Nagiosって個人で使う機会あまりないですよね。 発表資料を作成するときに、自宅サーバ(CentOS)にyumでインストールしてみましたが、監視するものがないので起動すらしていません。 強いて言えば、femoかもしれないけど、femoのサーバが落ちるより自宅の回線が落ちる回数の方が多いというオチにな

  • lighttpd vs Perlbal : blog.nomadscafe.jp

    lighttpd vs Perlbal lighttpdのlinux-aioサポートの記事を読んでいて気になったので、既にaioをサポートしているPerlbalの静的コンテンツを配信するWebサーバとしての性能を調べてみた。 サーバは CPU Pen4 2.8GHz ( HyperThreading付き) Memory 512MB FedoraCore6 な環境です。 上記の記事の様にファイルを3GBほど作成(メモリーより明らかに多い量) 小さい画像ファイルと見立てて、3KBのファイルを10*100*1000=1M個作成しました。 #/bin/bash for i in `seq 1 10`; do for k in `seq 1 100`; do mkdir -p $i/$k; for j in `seq 1 1000`; do dd if=/dev/zero of=$i/$k/$j b

  • Squid2.6 のCOSSがいい感じ : blog.nomadscafe.jp

    Squid2.6 のCOSSがいい感じ Squidの比較的新しいcache_dirのCOSSが結構いい感じに動いている。 COSSだと、cache objectが1つの大きなファイルに納められるので、ディスクIOがかなり改善しています。 あまり情報がないのですが、Wikiに設定の説明と、aufsとの比較とかがあります。 cache_dir coss /var/spool/squid/coss 30000 block-size=2048 max-size=500000 cache_swap_log /var/spool/squid/%s こんな感じの設定のサーバで、cache個数 50万ファイル以上、最大リクエスト数500req/sec以上、Hit rateが99%の状態において、CPU負荷がUser:数%、iowait:1%弱とかで推移。もうちょっとcache個数の多いサーバでもiowai

  • Load Balancer ManagerにアクセスするPerl Module : blog.nomadscafe.jp

    Load Balancer ManagerにアクセスするPerl Module mod_proxy_balancerのLoad Balancer ManagerにアクセスするPerl Moduleなんかも作っていたりするので、簡略版を載せてみる。 my $manager = BalancerManager->new( manager => 'http://proxy/lbman', balancer => 'test', # balancer://testの設定 ); $manager->enable('http://foo:8000'); #balancermanagerに登録してあるuri $manager->disable('http://foo:8000'); enable/disableの戻り値は画面のまんまで、Ok or Dis or Err。 該当しない場合は、「-」になる。

  • mod_proxy_balancerのretry : blog.nomadscafe.jp

    mod_proxy_balancerのretry mod_proxy_balancer(mod_proxy)のretry設定は、 コネクションをプーリングするための、リトライのタイムアウトを秒で 指定します。バックエンドサーバへのコネクションプーリングが失敗した場合は、 タイムアウトの期間が過ぎるまで、そのサーバにリクエストをフォワードしません。 というもので、 BalancerMember http://1.2.3.6:8000 retry=60 loadfactor=10 こんなように書ける。 アプリケーションサーバにデプロイするときに、 httpdの停止 rsync httpdの開始 という順番で行うのが通常だと思うけど、デフォルトのretry間隔が60秒になっているため、httpdを開始してからアクセスがバックエンドに届くには、最大1分間待たなければならない。 バックエンドのサーバ

  • Stacktrace付きdie : blog.nomadscafe.jp

    Stacktrace付きdie ログをもう少し詳しくしたいなぁと思って調べていて、Error.pmのソースで気がついたんけど、 eval { die Foo->new; } warn ref $@; #Foo が使えるんですね。 Sledge::Plugin::DebugScreenとか、CGI::Applicationだと$self->{__stacktrace}で情報を保存しているけど、$@を利用してstacktrace情報を受け渡すことができるよな、と考えたので書いてみた package MyApp::Exception; use strict; use warnings; use base qw/Class::Accessor::Fast Exporter/; use Devel::StackTrace; use overload '""' => 'as_string'; __PA

  • [warn] /test.cgi did not send an HTTP header : blog.nomadscafe.jp

    [warn] /test.cgi did not send an HTTP header おそらくModPerl::Registry環境でしかでないのだけど、動的コンテンツに対して、"If-Modified-Since"を送ると、error_logに、 [warn] /test.cgi did not send an HTTP header というのが、記録される。直接的な害はないことは確認済み。 再現させるには、 #!/usr/bin/perl use strict; use warnings; print "Content-Type: text/html\n\n"; print "x" x 1000; という簡単なCGIを書いて、 #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; my $url = "http:

    nipotan
    nipotan 2007/08/13
    If-Modified-Since 送られると死ねるとかいう話。
  • 本日のはまりコード : blog.nomadscafe.jp

    日のはまりコード 以下のプログラムを動かすと激しくメモリリーク use List::Util; my @parent; for ( 1..4 ) { push @parent, { key => "parent_" . $_, value => $_ }; } while (1) { my $child = rand(4); my $hit = List::Util::first { $_->{value} > $child } @parent; $hit ||= $parent[0]; print "$hit->{key}\n"; } List::Util::firstでのリファレンスが解放できないのかなぁ。。 仕方ないのでforeachで書き直した。 __追記 1.18では直っている模様 1.18 -- Fri Nov 25 09:30:29 CST 2005 Bug Fixes *

    nipotan
    nipotan 2006/06/23
    おー、超リークした。でも XS の場合だけ。bootstrap してるところをコメントアウトして PurePerl 実装で動かすとリークしない。
  • Femoで全角スペースでのタグの切り分けをサポートしました。 : blog.nomadscafe.jp

    Femoで全角スペースでのタグの切り分けをサポートしました。 Femoで全角スペースでのタグの切り分けをサポートしました。 全角 スペース というように全角で区切っても 全角、 スペース の2つのタグになります。 もちろん今まで通り半角スペースでも動きますです。 FemoはTagがつけられるメモ帳Webアプリケーションです。ぜひお試しください。ご意見もくださいませ。 ちなみに、タグを切り分ける部分のPerlのコードは以下のようになってます。 my @tags; my $tagtext = $self->tagtext; utf8::decode($tagtext) unless utf8::is_utf8($tagtext); my %seen; while ($tagtext =~ /\G [\p{Zs}\t\r\n\f,]* (?: (") ([^"]*) (?: " | $) | (

    nipotan
    nipotan 2006/06/06
    Text::Tags じゃなくて Text::ParseWords ならデリミタを指定出来るからこれの実装を簡単に出来ると思う。
  • mixi入社しました : blog.nomadscafe.jp

    mixi入社しました 6月1日、株式会社mixiに入社いたしました。 どうかよろしくお願いします。 前職をやめてから、様々な方にありがたいお声をかけていただいて、 感謝しております。期待に添えますよう、mixiにてがんばっていきたいと思います。

    nipotan
    nipotan 2006/06/02
    Boofy
  • Plagger::Plugin::Publish::Growl : blog.nomadscafe.jp

    Plagger::Plugin::Publish::Growl Publish::MSAgentをみて思いついた。 Mac OS XのGrowlへnotify GrowlはじめてつかったーYo。 package Plagger::Plugin::Publish::Growl; use strict; use base qw( Plagger::Plugin ); use Encode; use Mac::Growl; sub register { my($self, $context) = @_; $context->register_hook( $self, 'publish.init' => \&initialize, 'publish.entry' => \&entry, ); } sub initialize { my ($self, $context) = @_; my @upd

    nipotan
    nipotan 2006/02/27
    cool だけど仕事中には厳しい
  • Safari 2.0.3 supports setSelectionRange : blog.nomadscafe.jp

    Safari 2.0.3 supports setSelectionRange Mac OS X 10.4.4に含まれるSafari 2.0.3でFirefoxと同じく、setSelectionRange、selectionStart、selectionEndがサポートされたようです。 <input type="text" id="textfield" name="textfield" value="foo"/> <script type="text/javascript"> var ele = document.getElementById('textfield'); for(i in ele){ document.write(i + " = " + ele[i] + "<br />"); } </script> とした、結果の中に setSelectionRange = [functi

    nipotan
    nipotan 2006/01/12
    やっとサポートされた