Project

General

Profile

Feature #2328

malloc_limit の肥大化を防ぎたい

Added by wanabe (_ wanabe) about 11 years ago. Updated over 9 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:

Description

=begin
何らかの原因で malloc_limit が肥大化してしまうと、GC のタイミングが遅れて
Bug #1325 のように異常なほどのスワップや NoMemoryError を引き起こしかねません。
改善案としてパッチを二つ書きました。よろしければご検討ください。
また、このパッチが問題になるケースがあれば教えていただけるとありがたいです。

  1. vm_xrealloc() での malloc_increase のチェックおよび増加量の抑制

vm_xrealloc() では、malloc_increase は上限チェック無しで増加しており、
これは上記の問題につながります。
単純に vm_xmalloc() と同様の上限チェックを行うと GC が起こりすぎるので、
malloc_increase の増加量を、それまでの増加量の平均値(よりやや小さい値)だけ
抑制することで、メモリ使用量の近似値を取り、GC 回数を減らしました。

  1. GC ごとの malloc_limit の直接的な減少

  2. の対策をとっても、例えば malloc_increase が上限に近いときに大きなサイズの
    malloc がされることが続いた場合、malloc_limit は減少することなく増加し続けます。
    膨大なメモリを使う場合やプロセスの寿命が長い場合は特に蓄積量が大きいと思われます。
    この対策として、GC のたびに malloc_limit を何割かずつ減らすのはどうでしょうか。
    パッチでは 1/16 ほどの値を減らしています。
    =end


Files

suppress_malloc_increase-1.patch (1.88 KB) suppress_malloc_increase-1.patch wanabe (_ wanabe), 11/04/2009 08:28 AM
suppress_malloc_increase-2.patch (604 Bytes) suppress_malloc_increase-2.patch wanabe (_ wanabe), 11/04/2009 08:28 AM
test.rb (559 Bytes) test.rb wanabe (_ wanabe), 11/04/2009 09:01 PM
log.txt (1.51 KB) log.txt wanabe (_ wanabe), 11/04/2009 09:01 PM

Also available in: Atom PDF