タグ

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

  • 4歳の息子と0歳の娘がいる父親がおすすめの絵本を書いてみた - blog.nomadscafe.jp

    941さんが絵名作100リストというエントリーをあげていたので便乗してうちにあるからオススメを紹介してみる。 うちには4歳の息子と0歳の娘がいますが、(息子から見た)おばあちゃんがらでぃっしゅぼーやの絵くらぶというのに申し込んでくれていて、毎月絵が1冊届きます。親と息子でを選ぶと息子が好きな電車とか乗り物とか電車のに偏ってしまうと思うので、毎月いろんな絵が届くのはかなり良い。息子も新しいが来るのを楽しみにしています。 それに加えて、毎週木曜日に保育園からを借りてくるのと、近所の図書館で借りるがあるので、棚はいつもいっぱいです。 ずいぶん前からひらがなカタカナが読めていた息子なので一人でもを読むけど、毎日寝る前に2冊を読んでいます。寝落ちそうになりながら読んでいる事もあるけど、息子・娘ともにが好きになって、をきっかけに世界を広げていって欲しいと思うところです。

    riywo
    riywo 2013/12/04
  • G-WANはなぜ速いのか?をnginxと比べながら検証してみた - blog.nomadscafe.jp

    ツチノコブログのWEBサーバベンチマークツール比較の記事で紹介されていた。WebサーバのG-WAN。この記事によると凄く速いようです。 Intel Xeon E5-2640 (6コア/12スレッド 2.50GHz) を2つというサーバで gwan  334944 req/s nginx 111842 req/s と、速いと言われているnginxの3倍の速度を出しています。 このベンチマーク結果がとても気になったので、なぜG-WANが速いのか、自分でも検証してみました。 結論から言うと以下の2つ。 1) G-WANはデフォルトで物理CPUに合わせた数のスレッドを起動する 2) HTMLファイルも一度読み込んでキャッシュする という事です。 今回はAWSのcc2.8xlarge(E5-2670 8コア/16スレッド 2.60GHz *2)を使ってベンチマークを行いました。OSはAmazon L

    riywo
    riywo 2013/09/04
    love nginx!
  • Monoceros というPrefork型だけどC10Kの接続を捌くことができるPSGI/Plackサーバ書きました - blog.nomadscafe.jp

    Monoceros というPSGI/Plackサーバ書きました https://metacpan.org/release/Monoceros https://github.com/kazeburo/Monoceros StarmanやStarletのようなPreforkなアプリケーションサーバでは、コネクションの維持イコールプロセスの占有なので、HTTPのKeepAliveは無効にするのが一般的ですが、負荷の高いサービスではTIME_WAIT状態のソケットが溜まったり、SYN-ACKの再送問題などあり、KeepAliveを使いたいという欲求があったりなかったりします。 Monoceros はリクエストを処理するworkerの他に、イベントドリブンで動くコネクション管理プロセスを立てて、クライアントからの接続ソケットをunix domain socketを使いプロセス間でやりとりします。待機

    riywo
    riywo 2013/05/14
    すばらしい
  • Nagios と derived でMySQLのスロークエリの量を監視する - blog.nomadscafe.jp

    新しい機能をリリースした際に、MySQLに対して効率的ではないクエリが発行されてしまって、それが積もってサービス全体に影響が出てしまう前に発見してアラートをあげたい。 発見する手立てとしてはCPU使用率やInnoDBのROW OPERATIONSが考えられるところですが、今回はスロークエリが発生した回数を監視することにした。ちなみにいつものことながら対象とするMySQLは4.0系。long_query_timeがオンラインで変更できません。。。はい MySQLのスロークエリが発生した回数は、show status のSlow_queriesという項目でみることができて mysql> show status like 'Slow_queries'; +---------------+-------+ | Variable_name | Value | +---------------+---

    riywo
    riywo 2013/02/14
  • GrowthForecastをCPANにリリースしました - blog.nomadscafe.jp

    GrowthForecastをCPANにリリースしました https://metacpan.org/release/GrowthForecast インストールも cpanm GrowthForecast だけで完了します。 それから、このバージョンからインターフェイスやドキュメントのページが英語に変わってます。絶賛添削pullreq募集中です

    riywo
    riywo 2013/02/01
    cool!
  • DBIx::DSN::Resolver::Cached をリリースしました - blog.nomadscafe.jp

    YAPC::Asiaの前にDBIx::DSN::Resolverってのを書いてリリースしていますが、実際のWebアプリケーションで使うにはキャッシュやDNSRR対応などアプリケーション側でコードを書く必要があって面倒なので、簡単に使えるようラッパーとなるモジュールを書いてリリースしました。 https://metacpan.org/module/DBIx::DSN::Resolver::Cached DBIx::DSN::Resolver::Cached を使うことでDNSに掛かる負荷を押さえつつ簡単に負荷分散もできます。 use 5.10.0; use DBIx::DSN::Resolver::Cached; sub connect_db { state $r = DBIx::DSN::Resolver::Cached->new( ttl => 30, negative_ttl => 1

    riywo
    riywo 2012/10/11
    Good!
  • Twiggy::Prefork をリリースしました - blog.nomadscafe.jp

    だいぶ以前 Plack::Server::AnyEvent::Prefork というのを書いて某所で使っていたのですが、ここ数日で事例がもうひとつ増えたついでに Twiggy ベースに書き直してCPANリリースしました。 https://metacpan.org/module/Twiggy::Prefork 使うには、 $ plackup -s Twiggy::Prefork -a app.psgi な感じで、Server::Starterにも対応しているので、 $ start_server --port 5000 -- plackup -s Twiggy::Prefork -a app.psgi とすれば、hot-deployも可能です。 起動オプションは、Twiggyがサポートしているオプションに加えて、 —max-workers preforkするworker数 —max-reqs-

    riywo
    riywo 2012/10/06
  • MySQLの設定ファイル my.cnf をgithubにて公開しました & チューニングポイントの紹介 - blog.nomadscafe.jp

    YAPC::Asiaのスライドで予告していた通り、実際に弊社のいくつかのサービスで使っている my.cnf を公開しました。 github: https://github.com/kazeburo/mysetup/tree/master/mysql 今回、公開した理由はMySQl Beginners Talksの発表の中でも触れている通りです。MySQLのソースコード中に含まれるサンプルのmy.cnfが最近のサーバハードウェアや運用に合わなくなって来ているという状況で、自分の設定にイマイチ自信が持てていない人は少なくないはず。そこで各社秘伝のタレ的な my.cnf をOpen & Shareすることで、モダンなmy.cnfを作り上げる事ができるんじゃないかという考えの下、今回 github にて公開しました。 ファイルは4つあり、それぞれ MySQL 4.0、5.1、5.5、そしてテスト中

    riywo
    riywo 2012/10/05
  • YAPC::Asia 2012 で発表してきました!日本よ、これが #yapcasia だッ!! - blog.nomadscafe.jp

    5.6!5.6!5.6! 今年も無事にYAPC::Asiaに参加と発表させて頂く事が出来ました。牧さん、941さん、JPAの皆様、ボランティアの皆様、参加した全てのPerl Mongersに感謝です。 今年の発表は、去年のこの時期にやっていたlivedoor Blogのサーバ集約作業とその為につくったツールや自動化について紹介させて頂きました。 質問でも出てきた「作成した移行スクリプトの検証」ですが、メンテナンス時間内にデータベースのコピーが完了するかどうかの検証とあわせて、実際に実行して確認していました。今にして思えばdry-runモードを作ってテストケース書いて確認するぐらいやってもよかったかもしれません。次回(があれば)チャレンジしたいです。 もう一つ言い忘れてましたが、mysql40dumpはMySQL 5.1、5.5でも検証済みで弊社でもヘビーにサーバ運用に使っています。自動でm

    riywo
    riywo 2012/10/01
    時代の最先端やw
  • DBIx::DSN::Resolver ってのを書いた - blog.nomadscafe.jp

    YAPC::Asia Tokyo 2012 始まりましたね。 それとはあまり関係なく DBIx::DSN::Resolver というモジュールを書いてリリースしました https://metacpan.org/release/DBIx-DSN-Resolver 何をするモジュールなのかというと、DBIでデータベースに接続する際に使うDSN中のホスト名を名前解決してくれるモジュールです。mobageでxaicronが書いていたのを参考にして作りました dbi:mysql:database=mytbl;host=dbserver.local これを dbi:mysql:database=mytbl;host=10.9.4.1 と変換してくれます。 また、名前解決する機能を差し替える事ができるので、そこでキャッシュを挟む事も可能です。Cache::Memory::Simpleを使うと以下のよう

    riywo
    riywo 2012/09/28
    Mobageを支えてください!
  • Proclet::Declare リリースしました Re: Proclet::Declare について考えた - blog.nomadscafe.jp

    iPhone5の発表を見ずにコード書いて寝てたわー 昨日のforeman互換のprocletコマンドに引き続き Proclet::Declare について考えた - tokuhirom’s blog このモジュールをProcletのディストリビューションにいれてリリースしました。 https://metacpan.org/module/Proclet バージョンは 0.12 です 使い方 こんなスクリプト書いて use strict; use warnings; use Proclet::Declare; env( PLACK_ENV => 'development', LM_COLOR => 1, ); service('web', 'plackup -p 9413 app.psgi'); service('memcached', qw!/usr/local/bin/memcached

    riywo
    riywo 2012/09/13
    tokuhiromのコードコピペしてたので助かる!
  • やったー PerlでProcfileベースのプロセス管理ツール foreman の互換コマンド "proclet" できたよ - blog.nomadscafe.jp

    Webアプリケーション開発時などに依存するバックグラウンドプロセスを管理するツールとして rubyで作られた foreman というツールがあります Procfileという名前のファイルに worker: ./bin/worker web: plackup web.psgi と書いて $ foreman start とやると指定したプロセスを起動してくれるらしいです。 cho45やtokuhiromからの提案もあったので、Procletをベースに同様の機能を持つprocletコマンドを作り、Procletに同梱してリリースしました。 https://metacpan.org/module/Proclet バージョン0.11で追加されました。 インストールは $ cpanm Proclet 使い方 実装されていない機能もあるけどだいたいforemanと一緒です Procfileを用意して p

    riywo
    riywo 2012/09/13
    kazeburo++++++
  • File::RotateLogs っていうログをファイルに記録していくモジュールを書いた - blog.nomadscafe.jp

    「君のPSGIファイルを僕のミドルウェアでいっぱいにしたい」という台詞を思いついたけど使い道がない kazeburo です 似たようなログ記録モジュールはCPANにいくつかあるんだけど、File::RotateLogsっていうのを書いてCPANにあげました https://metacpan.org/release/File-RotateLogs 特徴は以下の通り strftimeベースのファイル名生成 秒数指定のrotation rotation時に最新のファイルへのsymlink 古いログはforkしてバックグラウンドで削除 使い方 Proclet と組み合わせると my $app = builder { enable 'AccessLog'; $app; }; my $rotatelogs = File::RotateLogs->new( logfile => '/path/to/ap

    riywo
    riywo 2012/08/31
  • ProcletでSTDOUT/STDERRにサービス名を追加して表示できるようになったよー - blog.nomadscafe.jp

    「kazeburo さんの Proclet をもちいた劣化 foreman の実装 - tokuhirom’s blog.」に STDOUT にタグつけたりはしてないけど、とりあえず起動はできる。STDOUT にタグつけるのは pipe で処理かまさないとだめなのでちと面倒 と書かれていたので、その面倒な事をProclet側で実装してみた。 https://metacpan.org/release/KAZEBURO/Proclet-0.09 プロセスの数だけpipeを作って、各プロセスでSTDERRとSTDOUTをpipeに結びつけ、ログ処理専用workerがそれをselectしつつ読み出すという設計になっています 使い方 my $proclet = Proclet->new( color => 1 ); $proclet->service( code => sub { my $loade

    riywo
    riywo 2012/08/31
    萌え萌え〜
  • cron等をつかって外部のAPIに問い合わせる場合は、毎時0分を避けるのが大人のマナー - blog.nomadscafe.jp

    なんかtwitterで書いたらウケたっぽいので cronをつかって外部のAPIに問い合わせる場合は、毎時0分をさけるのオススメ!!!!お兄さんとの約束だ!!! — masahiro nagano (@kazeburo) August 9, 2012 某サービスのAPIへの問い合わせ件数を調べると、毎時 0分台(0秒から59秒)のアクセスは1分から59分までの1分間の平均アクセス数の5倍から8倍にもなります。 これはおそらく、crontabの設定が 0 * * * * /path/to/call_foreign_api になっていることが多いからじゃないかなぁと思うのです。 その結果、サーバのロードアベレージは このように毎時0分だけ跳ね上がってしまいます。サービスを快適に提供できなくなる可能性があるので、APIの利用を制限したり、サーバを追加しなければなりません。これはサービス利用者、サー

    riywo
    riywo 2012/08/10
    吹いたwww
  • Perlでstrace -p pidして目的のシステムコールが来たら終了する - blog.nomadscafe.jp

    riywoさんの「Perlでssh tail -fして目的の行が来たら終了する」に便乗するコネタ。 ログをtailしながら(ほぼ)リアルタイムで解析していくworkerの処理がどれくらい遅延しているのか確認して、それをgrowthforecastでグラフ化したいなと思ったので以下のようなスクリプトを書いてcronで実行しているよという話 #!/usr/bin/perl use strict; use Time::Piece; use LWP::UserAgent; my $worker = `/usr/bin/pgrep worker.pl`; chomp($worker); die "couldnot find worker pid" unless $worker; pipe my $logrh, my $logwh or die "Died: failed to create pipe

    riywo
    riywo 2012/08/09
    すげー
  • アプリケーションがマルチスレッドでもマルチコアCPUを活かせない件 - blog.nomadscafe.jp

    もっと詳しい方のフォロー募集です アプリケーションがマルチスレッドになってもネットワーク処理が分散されなければマルチコアを活かせない典型的な例です。id:viverの古橋さんがs100kpsとしてあげていた件にも近いかも。 memcachedで現象を確認します。最近のmemcachedはマルチスレッドで動くようになっているので、まずはそれを確認します。 $ memcached-tool localhost stats|grep threads threads 4 スレッドが4つで起動しています。 負荷がそれなりにある状態(8000req/sec程度)で、コマンドラインでtopを開き、「1」キーを押して、CPUごとの使用率を表示します。(例はFedora8 kernel-2.6.23) Tasks: 77 total, 1 running, 76 sleeping, 0 stopped, 0

    riywo
    riywo 2012/08/09
  • CentOS 6.2 で RPS/RFS を使ってネットワークの割り込み処理を複数コアに分散してみた - blog.nomadscafe.jp

    以前(2010年)に「アプリケーションがマルチスレッドでもマルチコアCPUを活かせない件」というエントリにてCPUのコアが増えても割り込み処理が分散されないのでスケールされないと書いたけど、その後Linux KernelにRPS/RFSなる機能が追加され、割り込み処理が分散できるようになり、CentOS 6.2 でも使えるらしいので試してみました。 RPS/RFSについての紹介は VIOPS06で「RPS・RFS等最新Linux Kernel事例」と題してお話してきました http://d.hatena.ne.jp/syuu1228/20110722/1311322653 Linux内核 RPS/RFS功能详细测试分析 http://www.igigo.net/archives/204 が詳しい。2番目のはほぼ読めないけど、性能比較のグラフが分かりやすい。 今回試したサーバは、 OS: C

    riywo
    riywo 2012/08/09
    おおおおお!
  • MySQLのbinlogをmysqlbinlogとperlワンライナーでカジュアルに解析する - blog.nomadscafe.jp

    MySQLを運用していて特定の時間帯だけ更新クエリが増えているのを見つけたときにバイナリログを探ったりすることはまぁまぁあると思います。最近はmysqlbinlogperlのワンライナーをつかって調べています mysqlbinlogをつかって特定の時間帯のログを調べるのは $ mysqlbinlog --start-datetime="2012-07-31 09:41:00" --stop-datetime="2012-07-31 09:45:00" mysql-bin.941 こんな感じですね。ちなみにMySQL 4.0.x のmysqlbinlogにはstart-datetime、stop-datetimeのオプションがないので新しいバージョンが入っているサーバに転送するなりして実行しています。 この出力は #120731 09:41:48 server id 9316 end_lo

    riywo
    riywo 2012/08/02
  • sort と uniq でさくっとランキングを出力する - blog.nomadscafe.jp

    知っている人多いと思うけど、よく使うイディオム $ .. | sort | uniq -c | sort -nr 「sort | uniq -c」で重複行をカウントでき、さらに「sort -n」で行を数字と見なしてソートすることで重複行のカウントで並べなおすことができます 例えば、Webサーバのaccess_logからよくアクセスしてくるIPアドレスを集計してランキングを表示するには以下のよう書けます $ tail -10000 access_log |cut -f 1 -d ' ' | sort |uniq -c|sort -nr|head -10 209 207.46.204.192 203 59.106.108.114 202 66.249.69.108 171 199.59.149.168 137 78.46.45.35 129 66.249.69.65 120 66.249.69

    riywo
    riywo 2012/07/27
    常識的なスニペットですねぇ。sort -kつかうとカラムも指定できて便利。