タグ

ブックマーク / blog.nekokak.org (9)

  • Parallel::ForkManager と SIGNAL で子プロセス挙動制御の術 - blog.nekokak.org

    Just Ideaなんですが、 Forkして子プロセスに処理を行わせる事はよくやることなんですが、 実際の全ての処理にある程度時間がかかる場合に、現在走っている処理を一時停止したり再開したりすることができるとおもろいかなぁとおもったので サクっと書いてみた。 #! perl use strict; use warnings; use Parallel::ForkManager; use Time::HiRes qw(sleep); my $pm = Parallel::ForkManager->new(10); my $pause=0; $SIG{HUP} = sub { $pause ^= 1 }; my $finish=0; $SIG{TERM} = sub { $finish = 1 }; sub pause { $pm->wait_all_children; while (1) {

  • 実行時に使用したメモリを取得する幾つかの方法 - blog.nekokak.org

    あんまこういうの詳しくないので、詳しい人に教えてもらいたいのですが、 Perlのプログラムでどれだけメモリを消費したか確認するのに幾つか方法があると思います。 今回はwebアプリで1リクエスト毎に消費したメモリを取得したい感じ。 自分が知ってる方法は 1:Plack::Middleware::Debug::Memoryでやってるようにpsを叩いてメモリを取る my $out = `ps -o rss= -p $$`; $out =~ s/^\s*|\s*$//gs;こういうやつ。 2:Devel::Mallinfoを使う Devel::Mallinfoを使えばmallinfoが取得できるので、mallocされたサイズを取得できるので 開始と終了でmallinfoをとって差分を出せばプロセス中にどれくらいメモリを消費したかが分かる。 #! /usr/bin/perl use strict;

  • O/R Mapper についてかんがえてみた

    元ネタ)http://d.hatena.ne.jp/tokuhirom/20110104/1294170319 昔良くORMを使うことのメリットは SQLを書かなくてよくなる。 つまりプログラマはSQL脳が低いからプログラマにSQLを書かせない。 プログラム中にSQLという別の概念がはいってくるとコードが読み難くなる。 バックエンドのRDBMSの差異を吸収してくれるからバックエンドを気にする必要がない。 さらに、バックエンドのRDBMSを簡単に取替え可能。 プログラマブルにSQLを組み立てしたい。 などと言われることが多いんじゃないでしょうかね。 個人的には最後の「プログラマブルにSQLを組み立てしたい」と言う要件以外は全部 間違っていると思います。 イカ全て自分の視点なだけなので違う意見もあるであろうことを承知で言い切ります。 SQLを書かなくてよくなる。つまりプログラマはSQL脳が低い

    BigFatCat
    BigFatCat 2011/01/05
    メモ: SQL::Library
  • Smart::Argsの素晴らしいところ

    Sub::Argsというものを作っていながら、 Smart::Argsを紹介します。 一言でいうとSmart::Argsの良さは型チェックができるとかそんなことではなく、 argumentsをhashと同じキー名の変数でうけとれることでしょう。 サンプルコード use strict; use warnings; package Your::Class; use Smart::Args; sub foo { args my $self, my $fh, my $bucket => {optional => 1}, my $ext => {optional => 1}, ; } package main; foo(fh => $fh, bucket => $bucket, ext => $ext); # or foo({fh => $fh, bucket => $bucket, ext =>

  • プロジェクト開発におけるテスト用DBの(使い|作り)方

    昔書いたような気がしてたけど書いてなかったので。 モジュールをつくっていてDB回りのテストを書きたい場合は Test::mysqldやTest::postgresql を使うこと。 CPANなんかに上げるモジュールではなく、お仕事プロジェクトのコードを書いていて DB回りのテストを書きたいケースについてです。 私はMySQLを利用しているので、Test::mysqldをつかってもよいのですが、 起動コストがそれなりにかかるのと、ローカルの開発環境には既にMySQLは立ち上がっている前提があるので、 既に立ち上がっているMySQLをそのまま利用する方法をとっています。 そこでテスト用のユーティリティクラスを紹介してみます。 package t::Utils; use strict; use warnings; use utf8; use lib './t/'; use Test::Fixtu

  • wantarrayの使い方

    wantarrayは普段からまぁつかうのですが、 void contextの時の挙動が制御できるってしらなかったのでエントリー。 #! perl use strict; use warnings; sub foo { unless (defined wantarray) { warn 'void context'; return; } if (defined wantarray) { warn 'defined wantarray'; if (wantarray) { warn 'list context'; return; } else { warn 'scalar context'; return; } } } foo(); my $foo = foo(); my @foo = foo();こんなコードがあるとすると、実行結果は void context defined wantarr

  • 「バリデーションはどの位置で必要か」のやりとりで思ったこと。

    個人的にはapi単位での引数のバリデーションはあった方がbetterかなとおもう。 tokuhiromが 複数人で開発している場合では、クラスをかいた人と利用者がちがう場合があるので、validation は必要だとおもうけれど。と書いてるけどこれはまさにその通りで、 さらに言うと自分の書いたコードも時間が経てば他人が書いたコードと一緒だから バリデーションの情報から引数の情報を読み取れると、 そのapiに対する理解の速度は向上するとおもう。 実行速度とのトレードオフだったりはするだろうけど、無駄な引数渡したり、当は必要な引数を渡しきれなかったりして それで誤動作とかするくらいならバリデーションあったほうがいいんじゃないでしょうかね。 perlcodesampleさんの 動的言語の利点は、引数にどのような型でも渡せるので、静的言語のように型の指定がいらないということです。つまり、動的言語

  • メモリ使用量の確認

    サーバのメモリが思った以上に消費していたのでサックリ調べてたのですが 各プロセスのメモリ使用状況の調べ方としては ps aux --sort=-rss | head -40とやるとRSSのサイズでソートしてくれるのでheadとかでみてやればメモリ使用量が多い順に参照可能。 ただたんにps auxしただけだと見るのがしんどい。 topでもshift+Mで同じ感じでみれるのでそれでも良い。 (cを入力してプロセスの詳細を表示するとなおよい) あとはCoWに乗ってるかを調べたが、 http://d.hatena.ne.jp/naoya/20080212/1202830671 naoyaさんが紹介されている方法そのまんまでよいでしょう。 sudoして実行すること。 Cowはアプリの質にもよるが基的にはライブラリが共有メモリに乗ってればいいから アプリの質をみつつsharedなパーセントを調整出

    BigFatCat
    BigFatCat 2010/11/09
    BSD系では-mオプションぽい。
  • YAPC::Asia 2010 省サーバ運用のトークについて

    発表資料をアップしました! http://nekokak.org/presen/yapcasia2010-server/ がんばって話しました。 思いのほかあつまっていただきありがとうございました! みんないいエンジニアになろうぜ!ってことでひとつよろしくお願いします

  • 1