ディスクが溢れた時に、なるべくファイルを安全に保つ (書き込めない時は無理に書き込まずにトラップする) 方法。きっかけはここから。
/tmp を別パーティションに分けた状態で /tmp をほぼ満杯にしておく。その状態で、
$ perl -e 'open OUT, "> /tmp/out" or die; print OUT "1" x 200000000; close OUT or die $!'
とする。要は、open, close 時だけエラートラップしたということだが・・・ 結果。die しないでサイズ 0 の /tmp/out が出来てしまった。だめじゃん。
print (OUT "1" x 200000000) or die;
として print でトラップすると、サイズ 0 のファイルは出来てしまうものの die してくれる。これが安全か? しかし1行書き込むごとにトラップしてたら重くなる気もする。 まあ、ファイルが消失するよりはいいか・・・
ここら辺の話は OS やら ファイルシステムやらの実装に依存するのかな、と思ったので
で同様の実験をしてみたが、同様の結果であった。ふーん。(Perl はすべて 5.005_03)
こういう無茶な実験をしてて思うのだが、Solaris と FreeBSD はこのような過負荷状態
(ディスクが溢れんばかりに一気に write するわけだ) でも、比較的他のプロセスのレスポンスが良い。
例えば telnet でコマンドを叩いた時に、反応が早いのだ。
Linux は「固まったか?」と思うぐらい反応が遅くなっちゃうことがありがちで、これはサーバ
OS としてはどうなのかねえ。と思ったり。
# 内部のことなんて全然分かってないくせに偉そうだが (^^;