Project

General

Profile

Bug #9687

Make a cap for malloc_limit adjustment

Added by ko1 (Koichi Sasada) over 6 years ago. Updated over 6 years ago.

Status:
Closed
Priority:
Normal
Target version:
ruby -v:
2.2
[ruby-dev:48074]

Description

The blog post Ruby Garbage Collection: Still Not Ready for Production pointed out that the following code consumes all of memory:

while true
  "a" * (1024 ** 2)
end

This is because `malloc_limit' grows and grows infinitely.

The following patch will solve this issue.

Index: gc.c
===================================================================
--- gc.c    (revision 45433)
+++ gc.c    (working copy)
@@ -2890,7 +2890,7 @@ gc_before_sweep(rb_objspace_t *objspace)
        malloc_limit = (size_t)(inc * gc_params.malloc_limit_growth_factor);
        if (gc_params.malloc_limit_max > 0 && /* ignore max-check if 0 */
        malloc_limit > gc_params.malloc_limit_max) {
-       malloc_limit = inc;
+       malloc_limit = gc_params.malloc_limit_max;
        }
    }
    else {

Maybe this patch should be applied for 2.1.x series.

Updated by ko1 (Koichi Sasada) over 6 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

Applied in changeset r45468.


Updated by ko1 (Koichi Sasada) over 6 years ago

  • Status changed from Closed to Open
  • Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN to 2.0.0: UNKNOWN, 2.1: REQUIRED

Updated by nagachika (Tomoyuki Chikanaga) over 6 years ago

  • Status changed from Open to Closed
  • Backport changed from 2.0.0: UNKNOWN, 2.1: REQUIRED to 2.0.0: REQUIRED, 2.1: REQUIRED

Updated by nagachika (Tomoyuki Chikanaga) over 6 years ago

  • Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: DONTNEED, 2.1: REQUIRED

Updated by nagachika (Tomoyuki Chikanaga) over 6 years ago

  • Backport changed from 2.0.0: DONTNEED, 2.1: REQUIRED to 2.0.0: DONTNEED, 2.1: DONE

r45468 was backported into ruby_2_1 branch at r45817.

Also available in: Atom PDF