Comment #2 on issue 2483 by [email protected]: Creating large arrays fails since r13237
http://code.google.com/p/v8/issues/detail?id=2483

Can I have this issue reopened? I did some testing and I'm reasonably sure there's been a regression in V8 somewhere; I have a test that fails with 3.15.11.10 and passes with r13522.

$ cat bisect/tmp/test-net-connect-memleak.js
var common = { PORT: 12345 };
var assert = require('assert');
var net = require('net');

assert(typeof gc === 'function', 'Run this test with --expose-gc');
net.createServer(function() {}).listen(common.PORT);

(function() {
  // 2**26 == 64M entries
  for (var i = 0, junk = [0]; i < 26; ++i) junk = junk.concat(junk);

  net.createConnection(common.PORT, '127.0.0.1', function() {
    assert(junk.length != 0);  // keep reference alive
    setTimeout(done, 10);
    gc();
  });
})();

function done() {
  var before = process.memoryUsage().rss;
  gc();
  var after = process.memoryUsage().rss;
  var reclaimed = (before - after) / 1024;
  console.log('%d kB reclaimed', reclaimed);
  assert(reclaimed > 256 * 1024);  // it's more like 512M on x64
  process.exit();
}

$ master/out/Release/node -p process.versions.v8
3.15.11.10

$ master/out/Release/node --trace-gc --expose-gc bisect/tmp/test-net-connect-memleak.js [2891] 22 ms: Scavenge 2.3 (35.0) -> 2.0 (36.0) MB, 0 ms [Runtime::PerformGC]. [2891] 22 ms: Scavenge 2.3 (36.0) -> 2.3 (36.0) MB, 0 ms [Runtime::PerformGC]. [2891] 27 ms: Mark-sweep 9.8 (43.1) -> 5.8 (40.0) MB, 1 ms [Runtime::PerformGC] [GC in old space requested]. [2891] 32 ms: Mark-sweep 14.8 (48.1) -> 9.8 (44.0) MB, 2 ms [Runtime::PerformGC] [GC in old space requested]. [2891] 42 ms: Mark-sweep 26.8 (60.1) -> 17.8 (52.0) MB, 3 ms [Runtime::PerformGC] [GC in old space requested]. [2891] 61 ms: Mark-sweep 50.8 (84.1) -> 33.6 (68.0) MB, 4 ms [Runtime::PerformGC] [GC in old space requested]. [2891] 97 ms: Mark-sweep 98.6 (132.1) -> 65.6 (100.0) MB, 9 ms [Runtime::PerformGC] [GC in old space requested]. [2891] 163 ms: Mark-sweep 194.6 (228.1) -> 129.6 (164.0) MB, 14 ms [Runtime::PerformGC] [GC in old space requested]. [2891] 330 ms: Mark-sweep 385.6 (420.1) -> 257.6 (292.0) MB, 28 ms [allocation failure] [GC in old space requested]. [2891] 1024 ms: Mark-sweep 769.8 (804.1) -> 513.7 (548.0) MB, 55 ms [gc extension] [GC in old space requested]. [2891] 1067 ms: Mark-sweep 513.7 (548.0) -> 513.7 (548.0) MB, 42 ms [gc extension] [GC in old space requested].
-64 kB reclaimed

assert.js:102
  throw new assert.AssertionError({
        ^
AssertionError: false == true
at done [as _onTimeout] (/home/bnoordhuis/src/nodejs/bisect/tmp/test-net-connect-memleak.js:48:3)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
    at process._makeCallback (node.js:306:20)

$ upgrade-v8/out/Release/node -p process.versions.v8
3.16.11 (candidate)

$ upgrade-v8/out/Release/node --trace-gc --expose-gc bisect/tmp/test-net-connect-memleak.js [2907] 94 ms: Scavenge 2.3 (35.0) -> 2.0 (36.0) MB, 1 ms [Runtime::PerformGC]. [2907] 95 ms: Scavenge 2.3 (36.0) -> 2.3 (36.0) MB, 0 ms [Runtime::PerformGC]. [2907] 110 ms: Mark-sweep 9.8 (43.1) -> 5.8 (40.0) MB, 12 ms [Runtime::PerformGC] [GC in old space requested]. [2907] 128 ms: Mark-sweep 14.8 (48.1) -> 9.8 (44.0) MB, 14 ms [Runtime::PerformGC] [GC in old space requested]. [2907] 152 ms: Mark-sweep 26.8 (60.1) -> 17.8 (52.0) MB, 18 ms [Runtime::PerformGC] [GC in old space requested]. [2907] 190 ms: Mark-sweep 50.8 (84.1) -> 33.6 (68.0) MB, 24 ms [Runtime::PerformGC] [GC in old space requested]. [2907] 254 ms: Mark-sweep 98.6 (132.1) -> 65.6 (100.0) MB, 39 ms [Runtime::PerformGC] [GC in old space requested]. [2907] 372 ms: Mark-sweep 194.6 (228.1) -> 129.6 (164.0) MB, 68 ms [Runtime::PerformGC] [GC in old space requested]. [2907] 1326 ms: Mark-sweep 385.6 (420.1) -> 257.6 (292.0) MB, 128 ms [allocation failure] [GC in old space requested]. [2907] 7528 ms: Mark-sweep 769.8 (804.1) -> 513.7 (548.0) MB, 250 ms [gc extension] [GC in old space requested]. [2907] 7564 ms: Mark-sweep 513.8 (548.0) -> 1.7 (36.0) MB, 33 ms [gc extension] [GC in old space requested].
524260 kB reclaimed

Same node.js version, different V8 versions. 3.15.11.10 fails to reclaim the big array whereas the bleeding edge succeeds, the large object space is empty after the second gc().

I'd be happy to help with back-porting patches, just point me to the right commits. We want to release node.js v0.10 soon and this regression could be a blocker.

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev


Reply via email to