Navigation Menu

Skip to content
This repository has been archived by the owner on Aug 3, 2020. It is now read-only.

Memory leak in EventBus #63

Closed
momocow opened this issue Mar 5, 2019 · 2 comments
Closed

Memory leak in EventBus #63

momocow opened this issue Mar 5, 2019 · 2 comments

Comments

@momocow
Copy link
Owner

momocow commented Mar 5, 2019

For test snippets, see performance/leakage/once.test.js.

Within the test for CQWebSocket#once(), memory grows about 342KB after 180 iterations.

[node-cq-websocket] # npm run perf

> cq-websocket@2.0.0 perf /workspace
> tape performance/**/*.test.js

TAP version 13
# EventEmitter#once()
ok 1 should be equivalent
# CQWebSocket#once()

/workspace/node_modules/leakage/lib/index.js:66
    throw heapError
    ^
MemoryLeakError: Heap grew on 6 subsequent garbage collections (180 of 180 iterations) by 342 kB.

  Iterations between GCs: 30

  Final GC details:
  [   25.7 kB] [+ 181x] [-   1x] Array
  [   7.68 kB] [+ 120x] [-   0x] system / Context
  [   6.48 kB] [+  90x] [-   0x] Closure
  [   5.28 kB] [+  60x] [-   0x] Promise
  ... (5 more)

    at testConstantHeapSize (/workspace/node_modules/leakage/lib/testConstantHeapSize.js:24:12)
    at iterate (/workspace/node_modules/leakage/lib/index.js:64:21)
    at Test.<anonymous> (/workspace/performance/leak.test.js:23:3)
    at Test.bound [as _cb] (/workspace/node_modules/tape/lib/test.js:77:32)
    at Test.run (/workspace/node_modules/tape/lib/test.js:96:10)
    at Test.bound [as run] (/workspace/node_modules/tape/lib/test.js:77:32)
    at Immediate.next [as _onImmediate] (/workspace/node_modules/tape/lib/results.js:75:19)
    at runCallback (timers.js:810:20)
    at tryOnImmediate (timers.js:768:5)
    at processImmediate [as _immediateCallback] (timers.js:745:5)
@momocow
Copy link
Owner Author

momocow commented Mar 5, 2019

See performance/leakage/on-off.test.js.

Also the leakage occurs on CQWebSocket#on(), CQWebSocket#off(), memory grows about 305KB after 180 iterations..

[node-cq-websocket] # npm run perf

> cq-websocket@2.0.0 perf /workspace
> tape performance/**/*.test.js

TAP version 13
# EventEmitter#on(), EventEmitter#removeAllListener()
ok 1 should be equivalent
# CQWebSocket#on(), CQWebSocket#off()

/workspace/node_modules/leakage/lib/index.js:66
    throw heapError
    ^
MemoryLeakError: Heap grew on 6 subsequent garbage collections (180 of 180 iterations) by 305 kB.

  Iterations between GCs: 30

  Final GC details:
  [   21.6 kB] [+ 180x] [-   0x] Array
  [   5.28 kB] [+  60x] [-   0x] Promise
  [   5.28 kB] [+  90x] [-   0x] system / Context
  [   4.32 kB] [+  60x] [-   0x] Closure
  ... (5 more)

    at testConstantHeapSize (/workspace/node_modules/leakage/lib/testConstantHeapSize.js:24:12)
    at iterate (/workspace/node_modules/leakage/lib/index.js:64:21)
    at Test.<anonymous> (/workspace/performance/leakage/on-off.test.js:24:3)
    at Test.bound [as _cb] (/workspace/node_modules/tape/lib/test.js:77:32)
    at Test.run (/workspace/node_modules/tape/lib/test.js:96:10)
    at Test.bound [as run] (/workspace/node_modules/tape/lib/test.js:77:32)
    at Immediate.next [as _onImmediate] (/workspace/node_modules/tape/lib/results.js:75:19)
    at runCallback (timers.js:810:20)
    at tryOnImmediate (timers.js:768:5)
    at processImmediate [as _immediateCallback] (timers.js:745:5)

@momocow
Copy link
Owner Author

momocow commented Mar 12, 2019

The test files does not handle the returned promise well when calling bot.emit() resulting in misreporting the leakage.
There is actually no problem with the v2 codebase!

$ npm run perf

> cq-websocket@2.0.0 perf /wsp
> tape performance/**/*.test.js

TAP version 13
# EventEmitter#on(), EventEmitter#removeAllListener()
ok 1 should be equivalent
# CQWebSocket#on(), CQWebSocket#off()
ok 2 should be equivalent
# EventEmitter#once()
ok 3 should be equivalent
# CQWebSocket#once()
ok 4 should be equivalent

1..4
# tests 4
# pass  4

# ok

@momocow momocow closed this as completed Mar 12, 2019
💥 Embrace Hyper-Driven Development automation moved this from To do to Done Mar 12, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
No open projects
Development

No branches or pull requests

1 participant