Project

General

Profile

Actions

Bug #19970

open

Eval leaks callcache and callinfo objects on arm32 (linux)

Added by larsin (Lars Ingjer) 10 months ago. Updated 6 months ago.

Status:
Open
Assignee:
-
Target version:
-
ruby -v:
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [armv7l-linux-eabihf]
[ruby-core:115143]

Description

The following script demonstrates a memory leak on arm 32 (linux):

def gcdiff(n)
  GC.start
  if @last_gc_stat
     puts "GC.stat #{n} diff old_objects: #{GC.stat(:old_objects) - @last_gc_stat}"
  end
  
  @last_gc_stat = GC.stat(:old_objects)
end

def foo
end

10.times do |i|
  10_000.times do
    eval 'foo'
  end

  gcdiff(i)
  puts "Number of live objects: #{GC.stat(:heap_live_slots)}"
  puts "Memory usage: #{`ps -o rss= -p #{$$}`}"
  puts
end

Output:

Number of live objects: 41303
Memory usage: 11900

GC.stat 1 diff old_objects: 20037
Number of live objects: 61317
Memory usage: 13604

GC.stat 2 diff old_objects: 20001
Number of live objects: 81317
Memory usage: 14880

GC.stat 3 diff old_objects: 20000
Number of live objects: 101317
Memory usage: 16596

GC.stat 4 diff old_objects: 20000
Number of live objects: 121317
Memory usage: 17248

GC.stat 5 diff old_objects: 20000
Number of live objects: 141317
Memory usage: 18760

GC.stat 6 diff old_objects: 20000
Number of live objects: 161317
Memory usage: 19540

GC.stat 7 diff old_objects: 20000
Number of live objects: 181317
Memory usage: 21752

GC.stat 8 diff old_objects: 20000
Number of live objects: 201317
Memory usage: 21828

GC.stat 9 diff old_objects: 20000
Number of live objects: 221317
Memory usage: 24896

ObjectSpace.count_imemo_objects shows that imemo_callcache and imemo_callinfo are leaking.

The issue does not occur on arm64 mac or x86_64 linux with the same ruby version.
The issue has also been reproduced with the latest 3.2.2 snapshot (2023-09-30).


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #19907: Method calls with keyword arguments in eval leaks callcache and callinfo objectsClosedActions

Updated by larsin (Lars Ingjer) 10 months ago

The issue has also been reproduced on master (ruby 3.3.0dev (2023-10-24 master 60196b4780) [armv7l-linux-eabihf]).

Updated by jhawthorn (John Hawthorn) 6 months ago

I suspect this is the same underlying issue as #19907, but on wider platforms it only occurs with kwargs.

Actions #3

Updated by jhawthorn (John Hawthorn) 6 months ago

  • Related to Bug #19907: Method calls with keyword arguments in eval leaks callcache and callinfo objects added
Actions

Also available in: Atom PDF

Like1
Like0Like0Like0