2009年11月29日日曜日

the 力技

undefしようがメモリリークは解消されない。




と思ったらサンプル数を激減して生成するプロセス数だけは膨大にするというテストをすると、全プロセス終了時にはちゃんとメモリ解放してやがる。


ということは、子プロセスの生成時に確保されたメモリ領域は全仮想プロセスが終了するまで解放されないということかな? このシミュレーションでは最大3600の子プロセスを生み出しているからさすがにぶっ飛ぶと。そういうことかいな。





それなら子プロセスの生成数をいくつかに分割すりゃいいんじゃないか?





なんたるちから技。でもやってみよ。

2 件のコメント:

windowmoon さんのコメント...

ところで、ちゃんと同時生成プロセス数は制限してますか? やらないと落ちるのは当たり前ですよ? WikipediaのFork爆弾の項を参照。

windowmoon さんのコメント...

一つ前のコメントをプレビュー後確定させてなかったようなので再掲。

存在しないプロセスがメモリを占有することはOSとアプリがまともなら無いはずです。もし占有されるならOSか、OSとアプリの両方がおかしいのでしょう。MacPortsが入っているのでそちらから最新のPerlを入れて使ってみるといいかもしれません。ちゃんとOS標準のPerlとは別の場所へインストールされます。また、Windows上のActivePerlはOSがfork()をサポートしていないのでマルチスレッドを使ってエミュレーションしています。その際にスレッドセーフでないモジュールを使っていたりコードがあると落ちるでしょう。