スポンサーリンク

このドキュメントの内容は、以下の通りです。

ログ集計のプログラムを書いてる人がPerlがout of memoryするとか言って困っていました。ファイルサイズは、いくつなのかと尋ねると500MBぐらいと言うので、i386の設定がデフォルトのままのFreeBSDでやってるからプロセスが使えるメモリの上限に来たんだろうと思って、ソースを見てみました。

ソースを見れば、一目瞭然です。原因はこれです。
my $data = `zcat $file | nextcmd`;

openとパイプを組み合わせて処理するだけで問題が解決する話でした。
#!/usr/local/bin/perl -w
my $file = shift @ARGV;
open(F, "zcat $file | nextcmd|");
while(<F>) {
	doit($_);
}
close(F);

この手の話は、プロセスが使えるメモリサイズを増やしたり、プログラムの作りを直すことで簡単に解決します。メモリサイズを増やすのは、どちらかといえば、あまりお勧めできません。処理するデータサイズが増えれば、また同じ問題が発生するからです。

Unixのパイプってナイスなアイデアだなぁってよく思います。
庭に水をホースでまいてる姿からこの技術を生み出した人達の発想力に感謝です。

Perl関連記事


[2008-05-20-2] Perl Benchmarkモジュールで複数のサブルーチンをベンチマークする
[2008-07-03-1] perlでファイルを排他ロックをする
[2008-07-03-2] perl プログラム名を取得する方法
[2008-07-06-2] perl シグナルでプロセスを中断と再開する方法
[2008-07-07-1] perl signal SIGCHLDを受け取る
[2008-07-07-2] Perl 名前付きパイプ FIFOを作る方法
[2008-08-24-1] FreeBSD Perlモジュール IP::Countryをインストールする
[2008-08-24-2] Perlモジュール IP::Country::Firstを使って国を調べる
[2008-08-25-1] Perlモジュール IP::Countryのデータベース
[2008-09-08-1] Perlモジュール IP::Country::Firstで日本以外のIPを抽出する
[2008-12-04-1] Perl File::Basename パスからファイル名だけを取得する
[2008-12-06-1] Perl 日付と時刻からエポック秒を取得する方法 Time::Local timelocal

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー