#2530 Fix StringLogAppender leaks for MockHandler #2535
Merged
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.
Description
As the issue is reproducible by the long-running mock server, see: #2530
Memory analyzer
The thread stack from GC.heap_dump
The StringBuilder object inside StringLogAppender has never been called collect() to de-refer all the string objects. it leads to memory leaks on the long-running mock server.
Solutions
It seems that the mock usage does not need to use LogAppender, so MockHandler should have some ability to disable the appender.
Before
The memory trend increases over time and OOM at some point
After fixed
The memory trend is now stable (the lowest memory usage after GC is keeping below 100MB)