Skip to content

Instantly share code, notes, and snippets.

@owenallenaz
Created July 21, 2017 23:15
Show Gist options
  • Save owenallenaz/9fa93cee775ac834c0fcf7f41477c6a5 to your computer and use it in GitHub Desktop.
Save owenallenaz/9fa93cee775ac834c0fcf7f41477c6a5 to your computer and use it in GitHub Desktop.
RSS expansion due to WeakMap() usage

Permanently expanded RSS occurs when WeakMap() is used.

node --expose-gc --trace-gc weakTest.js

process { http_parser: '2.7.0',
node: '7.10.0',
v8: '5.5.372.43',
uv: '1.11.0',
zlib: '1.2.11',
ares: '1.10.1-DEV',
modules: '51',
openssl: '1.0.2k',
icu: '58.2',
unicode: '9.0',
cldr: '30.0.3',
tz: '2016j' }
settings { haltAfter: 30000,
clearAfterAllocate: false,
numObjects: 10000,
gcInterval: 5000,
logInterval: 1000,
allocateInterval: 10,
resetAfter: 60000 }
[6710:0x254d040] 84 ms: Scavenge 3.1 (6.5) -> 2.8 (7.5) MB, 1.4 / 0.0 ms allocation failure
[6710:0x254d040] 121 ms: Scavenge 3.3 (7.5) -> 3.2 (8.5) MB, 3.2 / 0.0 ms allocation failure
[6710:0x254d040] 125 ms: Scavenge 4.0 (8.5) -> 3.7 (10.5) MB, 1.8 / 0.0 ms allocation failure
[6710:0x254d040] 169 ms: Scavenge 6.2 (11.5) -> 5.8 (12.0) MB, 9.2 / 0.0 ms allocation failure
[6710:0x254d040] 194 ms: Scavenge 6.4 (12.0) -> 6.4 (17.5) MB, 11.5 / 0.0 ms allocation failure
[6710:0x254d040] 295 ms: Scavenge 13.8 (21.5) -> 13.8 (22.0) MB, 22.0 / 0.0 ms allocation failure
[6710:0x254d040] 328 ms: Scavenge 14.3 (22.0) -> 14.3 (33.5) MB, 19.1 / 0.0 ms allocation failure
[6710:0x254d040] 588 ms: Scavenge 37.6 (49.5) -> 37.6 (50.0) MB, 50.8 / 0.0 ms allocation failure
[6710:0x254d040] 645 ms: Scavenge 38.2 (50.0) -> 38.2 (73.5) MB, 42.6 / 0.0 ms allocation failure
[6710:0x254d040] 1047 ms: Scavenge 53.4 (73.5) -> 53.3 (74.0) MB, 90.9 / 0.0 ms allocation failure
[6710:0x254d040] 1140 ms: Scavenge 54.0 (74.0) -> 53.9 (89.5) MB, 76.2 / 0.0 ms allocation failure
rss 105492480 57192056
[6710:0x254d040] 2185 ms: Mark-sweep 144.4 (166.5) -> 85.5 (123.0) MB, 174.1 / 0.0 ms (+ 21.5 ms in 23 steps since start of marking, biggest step 1.7 ms, walltime since start of marking 576 ms) finalize incremental marking via stack guard GC in old space requested
rss 150376448 90132712
[6710:0x254d040] 2976 ms: Scavenge 114.4 (134.5) -> 114.3 (135.5) MB, 38.3 / 0.0 ms allocation failure
[6710:0x254d040] 3112 ms: Scavenge 116.9 (137.0) -> 116.9 (151.5) MB, 84.7 / 0.0 ms allocation failure
rss 194457600 133355000
[6710:0x254d040] 3756 ms: Scavenge 145.9 (167.0) -> 145.9 (168.0) MB, 38.5 / 0.0 ms allocation failure
[6710:0x254d040] 3881 ms: Scavenge 148.4 (169.5) -> 148.4 (184.0) MB, 73.3 / 0.0 ms allocation failure
rss 240492544 178957744
[6710:0x254d040] 4506 ms: Scavenge 177.3 (198.5) -> 177.3 (200.0) MB, 36.3 / 0.0 ms allocation failure
[6710:0x254d040] 4625 ms: Scavenge 179.9 (201.5) -> 179.9 (216.0) MB, 59.8 / 0.0 ms allocation failure
[6710:0x254d040] 5443 ms: Mark-sweep 203.5 (228.0) -> 67.2 (110.0) MB, 344.6 / 0.0 ms testing GC in old space requested
rss 151035904 71277296
[6710:0x254d040] 6172 ms: Scavenge 98.7 (119.0) -> 98.7 (119.0) MB, 34.6 / 0.0 ms allocation failure
[6710:0x254d040] 6244 ms: Scavenge 98.7 (119.0) -> 98.7 (135.0) MB, 71.5 / 0.0 ms allocation failure
rss 184926208 118479496
[6710:0x254d040] 6924 ms: Scavenge 130.1 (151.0) -> 130.1 (151.0) MB, 36.4 / 0.0 ms allocation failure
[6710:0x254d040] 6995 ms: Scavenge 130.1 (151.0) -> 130.1 (167.0) MB, 71.0 / 0.0 ms allocation failure
rss 224071680 162480184
[6710:0x254d040] 7725 ms: Scavenge 161.9 (183.5) -> 161.9 (183.5) MB, 43.0 / 0.0 ms allocation failure
[6710:0x254d040] 7805 ms: Scavenge 161.9 (183.5) -> 161.9 (199.5) MB, 80.0 / 0.0 ms allocation failure
[6710:0x254d040] 8487 ms: Scavenge 193.3 (215.5) -> 193.3 (215.5) MB, 39.2 / 0.0 ms allocation failure
[6710:0x254d040] 8555 ms: Scavenge 193.4 (215.5) -> 193.4 (231.5) MB, 68.2 / 0.0 ms allocation failure
rss 278343680 202765504
[6710:0x254d040] 9244 ms: Scavenge 224.8 (247.5) -> 224.8 (247.5) MB, 34.5 / 0.0 ms allocation failure
[6710:0x254d040] 9319 ms: Scavenge 224.8 (247.5) -> 224.8 (263.5) MB, 75.0 / 0.0 ms allocation failure
rss 317894656 247566192
[6710:0x254d040] 10007 ms: Scavenge 256.3 (279.5) -> 256.3 (279.5) MB, 36.5 / 0.0 ms allocation failure
[6710:0x254d040] 10078 ms: Scavenge 256.3 (279.5) -> 256.3 (295.5) MB, 70.3 / 0.0 ms allocation failure
[6710:0x254d040] 10887 ms: Mark-sweep 273.5 (304.0) -> 67.5 (111.5) MB, 443.8 / 0.0 ms testing GC in old space requested
rss 152940544 71553024
[6710:0x254d040] 11646 ms: Scavenge 98.9 (119.5) -> 98.9 (119.5) MB, 39.9 / 0.0 ms allocation failure
[6710:0x254d040] 11722 ms: Scavenge 98.9 (119.5) -> 98.9 (135.5) MB, 76.2 / 0.0 ms allocation failure
rss 184487936 117155200
[6710:0x254d040] 12459 ms: Scavenge 130.4 (151.5) -> 130.4 (151.5) MB, 48.2 / 0.0 ms allocation failure
[6710:0x254d040] 12552 ms: Scavenge 130.4 (151.5) -> 130.4 (167.5) MB, 92.4 / 0.0 ms allocation failure
rss 222416896 158755816
[6710:0x254d040] 13250 ms: Scavenge 161.9 (183.5) -> 161.9 (183.5) MB, 37.9 / 0.0 ms allocation failure
[6710:0x254d040] 13336 ms: Scavenge 161.9 (183.5) -> 161.9 (199.5) MB, 84.9 / 0.0 ms allocation failure
[6710:0x254d040] 14003 ms: Scavenge 193.3 (215.5) -> 193.3 (215.5) MB, 34.7 / 0.0 ms allocation failure
[6710:0x254d040] 14077 ms: Scavenge 193.3 (215.5) -> 193.3 (231.5) MB, 74.1 / 0.0 ms allocation failure
rss 278343680 202755736
[6710:0x254d040] 14757 ms: Scavenge 224.8 (247.5) -> 224.8 (247.5) MB, 35.0 / 0.0 ms allocation failure
[6710:0x254d040] 14823 ms: Scavenge 224.8 (247.5) -> 224.8 (263.5) MB, 65.2 / 0.0 ms allocation failure
rss 318713856 249156472
[6710:0x254d040] 15506 ms: Scavenge 256.3 (279.5) -> 256.3 (279.5) MB, 36.0 / 0.0 ms allocation failure
[6710:0x254d040] 15574 ms: Scavenge 256.3 (279.5) -> 256.3 (295.5) MB, 67.3 / 0.0 ms allocation failure
[6710:0x254d040] 16313 ms: Mark-sweep 271.2 (303.0) -> 67.1 (111.5) MB, 424.6 / 0.0 ms testing GC in old space requested
rss 152940544 71179088
[6710:0x254d040] 17081 ms: Scavenge 98.6 (119.5) -> 98.6 (119.5) MB, 39.0 / 0.0 ms allocation failure
[6710:0x254d040] 17173 ms: Scavenge 98.6 (119.5) -> 98.6 (135.5) MB, 91.4 / 0.0 ms allocation failure
rss 183607296 115181216
[6710:0x254d040] 17894 ms: Scavenge 130.1 (151.5) -> 130.1 (151.5) MB, 34.5 / 0.0 ms allocation failure
[6710:0x254d040] 17965 ms: Scavenge 130.1 (151.5) -> 130.1 (167.5) MB, 71.0 / 0.0 ms allocation failure
rss 223166464 159981904
[6710:0x254d040] 18639 ms: Scavenge 161.5 (183.5) -> 161.5 (183.5) MB, 35.3 / 0.0 ms allocation failure
[6710:0x254d040] 18705 ms: Scavenge 161.5 (183.5) -> 161.5 (199.5) MB, 66.4 / 0.0 ms allocation failure
[6710:0x254d040] 19382 ms: Scavenge 193.0 (215.5) -> 193.0 (215.5) MB, 32.3 / 0.0 ms allocation failure
[6710:0x254d040] 19453 ms: Scavenge 193.0 (215.5) -> 193.0 (231.5) MB, 70.7 / 0.0 ms allocation failure
rss 278286336 202381800
[6710:0x254d040] 20150 ms: Scavenge 224.4 (247.5) -> 224.4 (247.5) MB, 41.2 / 0.0 ms allocation failure
[6710:0x254d040] 20222 ms: Scavenge 224.5 (247.5) -> 224.5 (263.5) MB, 71.5 / 0.0 ms allocation failure
rss 317837312 247182488
[6710:0x254d040] 20909 ms: Scavenge 255.9 (279.5) -> 255.9 (279.5) MB, 36.8 / 0.0 ms allocation failure
[6710:0x254d040] 20976 ms: Scavenge 255.9 (279.5) -> 255.9 (295.5) MB, 66.2 / 0.0 ms allocation failure
[6710:0x254d040] 21747 ms: Mark-sweep 271.6 (303.0) -> 67.1 (111.5) MB, 432.9 / 0.0 ms testing GC in old space requested
rss 152944640 71163424
[6710:0x254d040] 22564 ms: Scavenge 98.6 (119.5) -> 98.6 (119.5) MB, 40.3 / 0.0 ms allocation failure
[6710:0x254d040] 22639 ms: Scavenge 98.6 (119.5) -> 98.6 (135.5) MB, 74.8 / 0.0 ms allocation failure
rss 183201792 114365528
[6710:0x254d040] 23325 ms: Scavenge 130.0 (151.5) -> 130.0 (151.5) MB, 40.4 / 0.0 ms allocation failure
[6710:0x254d040] 23400 ms: Scavenge 130.0 (151.5) -> 130.0 (167.5) MB, 74.6 / 0.0 ms allocation failure
rss 223162368 159966240
[6710:0x254d040] 24068 ms: Scavenge 161.5 (183.5) -> 161.5 (183.5) MB, 35.5 / 0.0 ms allocation failure
[6710:0x254d040] 24133 ms: Scavenge 161.5 (183.5) -> 161.5 (199.5) MB, 65.2 / 0.0 ms allocation failure
[6710:0x254d040] 24815 ms: Scavenge 193.0 (215.5) -> 193.0 (215.5) MB, 39.6 / 0.0 ms allocation failure
[6710:0x254d040] 24882 ms: Scavenge 193.0 (215.5) -> 193.0 (231.5) MB, 67.2 / 0.0 ms allocation failure
rss 278282240 202366136
[6710:0x254d040] 25579 ms: Scavenge 224.4 (247.5) -> 224.4 (247.5) MB, 34.2 / 0.0 ms allocation failure
[6710:0x254d040] 25653 ms: Scavenge 224.4 (247.5) -> 224.4 (263.5) MB, 74.5 / 0.0 ms allocation failure
rss 317837312 247166824
[6710:0x254d040] 26362 ms: Scavenge 255.9 (279.5) -> 255.9 (279.5) MB, 42.5 / 0.0 ms allocation failure
[6710:0x254d040] 26432 ms: Scavenge 255.9 (279.5) -> 255.9 (295.5) MB, 69.8 / 0.0 ms allocation failure
[6710:0x254d040] 27354 ms: Mark-sweep 270.8 (303.0) -> 67.1 (111.5) MB, 607.1 / 0.0 ms testing GC in old space requested
rss 152944640 71163424
[6710:0x254d040] 28166 ms: Scavenge 98.6 (119.5) -> 98.6 (119.5) MB, 36.7 / 0.0 ms allocation failure
[6710:0x254d040] 28236 ms: Scavenge 98.6 (119.5) -> 98.6 (135.5) MB, 70.6 / 0.0 ms allocation failure
rss 184430592 116765600
[6710:0x254d040] 28912 ms: Scavenge 130.0 (151.5) -> 130.0 (151.5) MB, 36.4 / 0.0 ms allocation failure
[6710:0x254d040] 28983 ms: Scavenge 130.0 (151.5) -> 130.0 (167.5) MB, 71.6 / 0.2 ms allocation failure
rss 224391168 162366312
[6710:0x254d040] 29669 ms: Scavenge 161.5 (183.5) -> 161.5 (183.5) MB, 36.5 / 0.0 ms allocation failure
[6710:0x254d040] 29742 ms: Scavenge 161.5 (183.5) -> 161.5 (199.5) MB, 72.6 / 0.0 ms allocation failure
done!
rss 254193664 187976600
rss 254222336 187994608
[6710:0x254d040] 32689 ms: Mark-sweep 179.3 (208.5) -> 67.1 (111.5) MB, 333.5 / 0.0 ms testing GC in old space requested
rss 211230720 70366392
rss 152510464 70369472
rss 152510464 70370864
rss 152510464 70372216
rss 152510464 70373568
[6710:0x254d040] 37802 ms: Mark-sweep 67.1 (111.5) -> 67.1 (72.5) MB, 111.5 / 0.0 ms testing GC in old space requested
rss 112074752 70366568
rss 112074752 70369648
rss 112074752 70371000
rss 112074752 70372352
rss 112074752 70373704
[6710:0x254d040] 42917 ms: Mark-sweep 67.1 (72.5) -> 67.1 (72.5) MB, 113.3 / 0.0 ms testing GC in old space requested
rss 111050752 70366568
rss 111054848 70369648
rss 111054848 70371040
rss 111058944 70372392
rss 111058944 70373784
[6710:0x254d040] 48012 ms: Mark-sweep 67.1 (72.5) -> 67.1 (72.5) MB, 93.9 / 0.0 ms testing GC in old space requested
rss 111050752 70362448
rss 111054848 70365528
rss 111054848 70366920
rss 111058944 70368272
rss 111058944 70369664
[6710:0x254d040] 53113 ms: Mark-sweep 67.1 (72.5) -> 67.1 (72.5) MB, 99.4 / 0.1 ms testing GC in old space requested
rss 111050752 70362048
rss 111054848 70365128
rss 111054848 70366520
rss 111058944 70367872
rss 111058944 70369264
[6710:0x254d040] 58221 ms: Mark-sweep 67.1 (72.5) -> 67.1 (72.5) MB, 106.4 / 0.0 ms testing GC in old space requested
rss 111050752 70362048
rss 111054848 70365128
rss 111054848 70368024
rss 111058944 70369376
rss 111058944 70370768
[6710:0x254d040] 63239 ms: Mark-sweep 67.1 (72.5) -> 3.1 (8.5) MB, 16.4 / 0.0 ms testing GC in old space requested
rss 92803072 3252856
rss 29847552 3255920
rss 29847552 3257296
rss 29851648 3258640
rss 29851648 3260016
[6710:0x254d040] 68251 ms: Mark-sweep 3.1 (8.5) -> 3.1 (8.5) MB, 10.4 / 0.0 ms testing GC in old space requested
rss 29843456 3250136
rss 29847552 3253200
rss 29847552 3254576
rss 29851648 3255920
rss 29851648 3257296
[6710:0x254d040] 73258 ms: Mark-sweep 3.1 (8.5) -> 3.1 (8.5) MB, 5.6 / 0.0 ms testing GC in old space requested
rss 29843456 3250056
rss 29847552 3253120
rss 29847552 3254496
rss 29851648 3255840
rss 29851648 3257216
[6710:0x254d040] 78265 ms: Mark-sweep 3.1 (8.5) -> 3.1 (8.5) MB, 5.3 / 0.0 ms testing GC in old space requested
rss 29843456 3250056
rss 29847552 3253120
rss 29847552 3254496
rss 29851648 3255840
rss 29851648 3257216
[6710:0x254d040] 83272 ms: Mark-sweep 3.1 (8.5) -> 3.1 (8.5) MB, 5.9 / 0.0 ms testing GC in old space requested
rss 29843456 3250056
rss 29847552 3253120
rss 29847552 3254496
var v8 = require("v8");
var map = new WeakMap();
var settings = {
haltAfter : 30000,
clearAfterAllocate : false,
numObjects : 10000,
gcInterval : 5000,
logInterval : 1000,
allocateInterval : 10,
resetAfter : 60000
}
var allocateObjects = function() {
for(var i = 0; i < settings.numObjects; i++) {
var obj = { foo : "fooValue", bar : "barValue" };
map.set(obj, true);
}
}
// execute a mark-sweep gc on an interval
setInterval(function() {
gc();
}, settings.gcInterval);
// output the state of memory
var checkI = setInterval(function() {
var mem = process.memoryUsage();
console.log("rss", mem.rss, mem.heapUsed);
}, settings.logInterval);
// after a period of time start allocatings, so that we can see how gc's clean up the mess
setTimeout(function() {
clearInterval(allocateI);
console.log("done!");
}, settings.haltAfter);
setTimeout(function() {
console.log("full reset");
map = new WeakMap();
}, settings.resetAfter);
// on an interval allocate new objects, if the conditional is true, it clears the maps stopping the expansion
var allocateI = setInterval(function() {
allocateObjects();
if (settings.clearAfterAllocate === true) {
map = new WeakMap();
}
}, settings.allocateInterval);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment