タグ

ブックマーク / kazuhooku.hatenadiary.org (3)

  • 安全なファイル書き換えにはディレクトリも fsync すべき。だけど Perl でどう書くか - kazuhoのメモ置き場

    間違ってたらツッコミお願いします。 ext4 が出たタイミングで話題になったことだけど、(ext4 に関係なく一般論として) ファイルを安全に書き換えるためには、いくつかの手順を踏む必要がある。で、Perl だとだいたい以下のようになる。 # 1) 適当なテンポラリファイル名 (格納先と同ディレクトリ) my $newfn = "tmp.$$"; # 2) ファイルを書いて fsync open my $fh, '>', $newfn or die "failed to open file:$newfn:$!"; print $fh $data; IO::Handle::flush($fh); or die "flush failed:$!"; IO::Handle::sync($fh); or die "fsync failed:$!"; close $fh; # 3) 古いファイルを別

    安全なファイル書き換えにはディレクトリも fsync すべき。だけど Perl でどう書くか - kazuhoのメモ置き場
    PSV
    PSV 2010/08/07
    my $newfn="tmp.$$";fsync open my $fh,'>',$newfn or die "failed:$!";print $fh $data;IO::Handle::flush($fh) or die "flush failed:$!";IO::Handle::sync($fh) or die "fsync failed:$!";close $fh;link $fn,"$fn~" or die "failed:$!";rename $newfn, $fn or "failed to rename $newfn to $fn:$!";
  • 大容量メモリの確保の話 - kazuhoのメモ置き場

    参照: http://d.hatena.ne.jp/ryocotan/20081006/p1, http://d.hatena.ne.jp/ryocotan/20081011/p1 Windows ってオーバーコミットしなかったような 一気に大量に malloc すると、swap が足りなくて失敗するんじゃないか*1 swap は適宜拡張されて行くのでちょっとずつ malloc すれば OK みたいな いずれにせよ、GB 単位のメモリを確保して使うのであれば、同サイズのファイルを作って、CreateFileMapping (mmap) するのがいいんじゃないのかなぁ。そうすれば、ユーザー空間の連続アドレスが確保できれば (64bit なら問題ないし、32bit でも事前にほぼ成否が予測できる)、malloc のように環境によって成否が分かれるとか、OOM killer でいきなり殺されると

    大容量メモリの確保の話 - kazuhoのメモ置き場
    PSV
    PSV 2008/10/23
    いずれにせよ、GB 単位のメモリを確保して使うのであれば、同サイズのファイルを作って、CreateFileMapping (mmap) するのがいいんじゃないのかなぁ。
  • リモートサーバに接続できない場合の telnet による原因切り分け方法 - kazuhoのメモ置き場

    1) telnet host port して Escape character is ... と出た後、すぐ (あるいは少しして) 接続が切れる → 接続後 fork() 等で落ちている → サーバのメモリ不足やプロセスの無限増殖を疑う 2) telnet host port して Escape character is ... と出るが、その後何も起こらない → SYN_ACK が返ってきている → カーネルは生きている。ユーザーランドの負荷が極めて高い可能性 3) telnet host port して、すぐ connection refused と出る → RST が返ってきている → port が閉じている (サーバプロセスが落ちた?) か、または accept(2) していない 4) telnet host port して、しばらくたってから connectin refused

    リモートサーバに接続できない場合の telnet による原因切り分け方法 - kazuhoのメモ置き場
  • 1