The slides I used for my presentations at YAPC::Asia 2010 are now available from the links below. Thank you to those who came, and JPA and the volunteer stuff for running the event. I hope you enjoyed (will enjoy) my slides!
暴走してどんどんメモリを食うスクリプトが OS全体のメモリ使用量(CentOS5 ... カーネルは2.6系になる)の動作にどんな影響を与えるのか ってのを見るために以下のようなテストをしてみました。仕組みはだいたい理解してるけど、細かい数値を追ったことはなかったのでやってみました。 sshでログインして、topを立ち上げる。プロセスを見張る用意をしておく 別のsshをたちあげて、 Perlワンライナーで以下のようなプロセスを走らせる(このプロセスをtopで見張る) # 1秒ごとに5MB単位でメモリを食うプロセス # 数値はお好みで perl -e "while(1){ sleep 1; push @h , 1 x 1024 x 1024 x 5 } " ちなみにtopで見張るときは メモリ使用量でソートされるようにして top起動中に shift + o を押して n を押すと 実メモリ
YAPC::Asia で Perl UNIX ネットワークプログラミングについての発表をしてきました。UNIX ネットワークプログラミングの基礎の概論、I/O多重化の話、Perl のモダンなネットワークライブラリの話です。資料を以下に置いておきます。 http://bloghackers.net/~naoya/ppt/070404Perl_and_UNIX_Network_Programming.ppt (ppt, 122k) なお、会場では口頭で触れましたが、資料中のソースは簡単のためエラー処理を飛ばしています。また、途中で出てくる図は例えば vfs のページキャッシュをはしょってあったりとこれも簡単のため省略事項がある点にご注意ください。 それからフォントが Consolas なので Consolas が入ってない環境だと変になる、かも。
ウノウラボ Unoh Labs: コマンドラインで作業する上で知っておくといいテクニック% find . -name '*~' -exec rm {} \; 404 Blog Not Found:勝手に添削 - find(1)% find . -type f -name '*~' | xargs rm % find . -type f -name '*~' | perl -nle unlink わたしなら% find . -type f -name '*~' | sed 's/^/rm /'で確認し、OK なら% find . -type f -name '*~' | sed 's/^/rm /' | shで消します。 いまどき fork/exec rm のオーバーヘッドがどれほどのものか。 xargs を使うとき、rm が 1回だけ実行されるときと、ARG_MAX を超えたときに rm
書こう書こう書こうと思っていたら先に書かれてしまった。 404 Not Found この行き場の無い感情をどうにかボクの中から排除しなければならない。 そう考えたときに独り言のようにこのブログロに記述すれば良いじゃないかという 結論にたどり着いたのはもはや必然とも言える。 find | xargs による探索だが、それが簡単なものであれば 実は grep コマンドだけでうまくいく。 GNU grep、BSD 系の grep コマンドでは include、exclude オプションで再帰検索時に検索対象とするファイルを絞り込む事が出来るのだ。 --include=pattern --exclude=pattern たとえば、カレントディレクトリ以下の *.rb から test という文字列を 含むファイルを探索したい場合は次のようにすれば良い。 fgrep -r --include='*.r
答:psのSTATが「D」のがそれだす。 alias iops='ps auxwwww|awk "\$8 ~ /(D|STAT)/{print}"' とかでよし。
shell と SIGHUP - odz buffer 関連: 一度 tty から起動したプロセス (csh/ksh 版) - にぽたん研究所 なるほど。zshではデフォルトだと 終了時にSIGHUPが送信されるらしい。 手元のbash2.0で試してみたら終了時にSIGHUPが送信されなかった。 zshで終了時に警告を出さないようにするには、 setopt nocheckjobs とすればよいようだ。 あと、zshにはいきなりdisownの状態(job tableに加わらない状態)で バックグラウンド実行する &! という記法がある。 SIGHUP送られない。 % perl nohup.pl &! % exit % pgrep -fl nohup.pl 524 perl nohup.pl -- 余談だが、zshではsetoptに指定するオプション名に 好きなだけアンダーバーをつける事が出来
ref:一度 tty から起動したプロセス (csh/ksh 版) - にぽたん研究所 id:lurker さんのブックマークコメントから disownはSIGHUP無視するようにします。bgとはちょっと違うものだと思います。/gdb使えば入出力は差し替えれそう。 だよね、とか思いつつ(gdbを使った端末差し替えは気になるけどとりあえずスルー)、zsh と tcsh で試す。 zsh で。 % cat nohup.pl #!/usr/bin/env perl use strict; use warnings; $SIG{HUP} = sub { print "recieved SIGHUP\n"; exit; }; while (1) { sleep 10; } % ./nohup.pl & % exit zsh: you have running jobs. % exit recieve
shell のちょっとしたテクニック - odz buffer odzさんのところで単語の出現頻度を調べるためのワンライナーが紹介されている。 単語抽出についてはいくつかやり方があるので紹介する。 特に egrep -o は非常に実用的。 もちろん、この話はリンク先において主題ではない。 俺のただの自己満足。 tr -cs で単語抽出 $ tr -cs 'a-zA-Z' '\n' < ./.zshrc 上記コマンドで、a-zA-Zのみで構成される文字列を抽出できる。 -c オプションで、'a-zA-Z' の補集合(以外)を '\n' に変換し、 -s オプションで、最後の引数で指定される要素の重複を除去している。すなわち '\n' の連続を除去している。 grep -o で単語抽出 grepには、( -o、--only-matching ) オプションというのがある。 これは、指定された正
2007年01月18日08:00 カテゴリLightweight Languages perl - pargs = xargsモドキ GNUじゃなけりゃ 作ってしまえ xargs. 技術メモ帳 - xargsコマンドを使って指定したコマンドを並列実行させる あまり知られていないが、GNUのxargsコマンドには、 プロセスの最大数を設定できるオプションというのが用意されている。 コレを使って、プロセスを並列実行させてみよう。 OS Xのxargs(1)はgnu版じゃないんだよね。 というわけでperlで即興で作ったのがこちら。 pargs #!/usr/local/bin/perl use strict; use warnings; use Getopt::Std; use POSIX ":sys_wait_h"; our $PPID = $$; our %Opt; getopts "P:
デバッグやテストを行っていると、プログラムが無限ループに入り込んで返ってこないような状況が発生することがあります。 そのバグが再現の難しいものであれば「gdbを使って起動しとけば良かった。。。」というような気分になる時があります。 しかし、gdbには既に起動しているプログラムの制御を横から奪い取ってデバッグするというありがたい機能があります。 ここでは、既に起動しているプログラムをgdbでいじる方法を説明したいと思います。 実際にデバッグをする方法を説明するというよりは、gdbで動いているプロセスにアタッチする例を説明します。 その後のデバッグに関しては、いつものgdbの使い方をしていただければ大丈夫です。 とりあえずアタッチしてみる 既に起動しているプロセスをgdbを解析するのは非常に簡単です。 単にgdbでプロセスにアタッチするだけです。 gdbでプロセスにアタッチする方法は2つありま
あまり知られていないが、GNUのxargsコマンドには、 プロセスの最大数を設定できるオプションというのが用意されている。 コレを使って、プロセスを並列実行させてみよう。 xargs --max-procs=MAX-PROCS -P MAX-PROCS command MAX-PROCSに数字を指定すると、 最大で、その数だけ command プロセスを生成する。 デフォルトは、1プロセスだけになっている。 いくつか例を交えて説明する。 サンプルとして、以下のようにURLが行ごとに記述されたファイルを元に curlをxargsで並列実行して、HTMLデータを取得してみよう。 $ cat ./url_list.txt http://www.google.co.jp/ http://www.yahoo.co.jp/ http://b.hatena.ne.jp/ まず、普通にxargsを使ってc
zsh には、zargsコマンド(組み込み関数) というのが用意されている。 これは、拡張グロブ用の xargs コマンドと言っても良いだろう。 マニュアルを見ると、xargs コマンドとオプションは、完全に互換しているらしい。 autoload zargs とする事で利用可能だ。 使い方だが、xargs というと、標準入力から読み込んだ要素、行に対して 特定のコマンドを実行するというものだが zargs の場合は、引数に指定した 拡張グロブ に対してこれらの処理を行う。 % zargs OPTIONS -- 拡張グロブ -- 実行したいコマンド たとえば、xargs で一番利用されると思われる ファイル数が ARG_MAX を越えてしまっているディレクトリ内のファイルを まとめて削除したい場合などは、次のようなコマンドを入力すれば良い。 % zargs -- ./* -- rm これだけ
2007年01月14日05:30 カテゴリLightweight Languages一日一行野郎 perl - Yet Another 10のUNIX小技 Geekなぺーじ:10のUNIX小技にperlを加えるとさらに幸せになれるというお話。 1.ディレクトリの作成 今時-pをサポートしていないmkdir(1)はないと思いますが、ない場合は perl -MFile::Path -e 'mkpath $_ for @ARGV' path/to/dir more/path/to/dir ... で代用が出来ます。 alias mkpath perl -MFile::Path -e \'mkpath \$_ for @ARGV\' と.bashrcや.cshrcとしておけば、 mkpath path/to/dir more/path/to/dir ... と出来ます。 2. tarの解凍先を指定
前エントリWeb2.0とC10Kに関する数々の誤解に関してはいろいろツッコミをいただいた(ありがとうございます). 名無し 『誤読した上にえらそうに微妙な解説するあたり恥ずかしすぎます。』 えらそうで微妙な解説なのはまぁそうなので否定しないが,誤読とはなんのことだろう? こういうときは今はやりの「スルー力」を発揮するのが大人のインターネットかと思ったけれど, 私のBlogが扱う内容は非常に狭く,さらにそれに対して突っ込もうと思う人の 意見はなにかしらの真実が含まれるはずと考えていたところ,下記エントリがあった. 元記事の人は上でいう 3,6 あたりを書いていて,id:yamaz さんは 3 するなら 4 とか常識だろ,と噛みついているように読めました。. なるほど,私の前エントリは@ITの元記事に対して噛みついているように 読めるようだ(言われてみればたしかにそう読める). 実際の所は元記
IBMのサイトで「Learn 10 good UNIX usage habits」という記事が発表されていました。 面白かったので要約してみました。 変な部分があるかも知れないので詳細は原文をご覧下さい。 原文とは一部異なります。 本ページスペースなどの関係でコマンド引数などを短く省略しています。 原文のサンプルコマンドが間違っていたりするので、修正している部分もあります。 原文を修正しているのは、tar.gzをzオプションを使わないでxfvしようとしているところと、xargsにlsではなくls -lを渡している部分です。 あと、説明文を短くしてしまっています。 1. ディレクトリの作成 良く使うコマンドの一つであるmkdirですが、面倒臭い使い方をしていませんか? 悪い例 ~/ $ mkdir a ~/ $ cd a ~/a $ mkdir b ~/a $ cd b ~/a/b/ $ m
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く