Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GroupBy GroupDurationSubscriber references retained - memory build up #2661

Closed
crunchie84 opened this issue Jun 13, 2017 · 1 comment
Closed

Comments

@crunchie84
Copy link
Contributor

RxJS version:
5.4.0

Code to reproduce:

const Rx = require('rxjs/Rx');

Rx.Observable.interval(500)
  .groupBy(
    i => i,
    null,
    i => i.take(1)
  )
  .subscribe(
    null,
    err => console.log('err: ' + err),
    () => console.log('completed')
  );
  1. Invoke code using node --debug-brk --inspect index.js
  2. attach the chrome debugger
  3. take heap snapshot before letting code run
  4. after ~30 seconds take another heap snapshot
  5. => 60 GroupDurationSubscriber's still around in memory

Expected behaviour:

GroupDurationSubscribers should be removed from the (GroupBy) parent subscription once completed.

Actual behaviour:

GroupDurationSubscribers are retained in memory.

screen shot 2017-06-13 at 14 31 57

Additional information:

When the GroupDurationSubscriber is completed it invokes this.parent.removeGroup which removes the group but it never invokes this.parent.remove(this) to let the parent (groupBy operator) remove the reference to the GroupDurationSubscriber so it can be garbage collected.

This behaviour was implemented in rxjs4

Only when the GroupBy operator completes are all the subscriptions let go off and garbage collected.

hermanbanken added a commit to hermanbanken/RxJS that referenced this issue Jun 13, 2017
The subscriptions to the durationSelector would pile up in the
internal subscription list of the GroupBySubscriber. By maintaining
a map entry per group we can discard subscriptions of a single
group.

Fixes ReactiveX#2661
hermanbanken added a commit to hermanbanken/RxJS that referenced this issue Jun 13, 2017
The subscriptions to the durationSelector would pile up in the
internal subscription list of the GroupBySubscriber. By maintaining
a map entry per group we can discard subscriptions of a single
group.

Fixes ReactiveX#2661
hermanbanken pushed a commit to hermanbanken/RxJS that referenced this issue Jun 13, 2017
The subscriptions to the durationSelector would pile up in the
internal subscription list of the GroupBySubscriber. By maintaining
a map entry per group we can discard subscriptions of a single
group.

Fixes ReactiveX#2661
hermanbanken pushed a commit to hermanbanken/RxJS that referenced this issue Jun 13, 2017
The subscriptions to the durationSelector would pile up in the
internal subscription list of the GroupBySubscriber. By removing
the GroupDurationSubscriber explicitly from the GroupBySubscriber
we prevent potential OOM exceptions.

Fixes ReactiveX#2661
@lock
Copy link

lock bot commented Jun 6, 2018

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

@lock lock bot locked as resolved and limited conversation to collaborators Jun 6, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant