Limit size of outbound write buffer #127
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Avoids excessive memory usage when a peer requests data faster than it can read it. There is probably a need to make the values used configurable and possibly vary them based on the stream state (ie multi stream negotiation should have little to no write buffer beyond what the OS provides, but things like Eth2 request for blocks might need more). Not entirely sure how that should fit into the API for jvm-libp2p though.
Changes made:
Prior to these changes a server handling a constant stream of
ls
multistream requests where the responses are not read, would use 5-6Gb of resident memory and all available CPU. Afterwards resident memory only grows by a few Mb, the CPU usage is negligible and the attacking connection is disconnected.