mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
http2: report memory allocated by nghttp2 to V8
This helps the JS engine have a better understanding of the memory situation in HTTP/2-heavy applications, and avoids situations that behave like memory leaks due to previous underestimation of memory usage which is tied to JS objects. Refs: https://github.com/nodejs/node/issues/28088#issuecomment-509965105 PR-URL: https://github.com/nodejs/node/pull/28645 Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
parent
60a207f5f2
commit
57c70835af
@ -557,11 +557,20 @@ class Http2Session::MemoryAllocatorInfo {
|
||||
|
||||
if (mem != nullptr) {
|
||||
// Adjust the memory info counter.
|
||||
session->current_nghttp2_memory_ += size - previous_size;
|
||||
// TODO(addaleax): Avoid the double bookkeeping we do with
|
||||
// current_nghttp2_memory_ + AdjustAmountOfExternalAllocatedMemory
|
||||
// and provide versions of our memory allocation utilities that take an
|
||||
// Environment*/Isolate* parameter and call the V8 method transparently.
|
||||
const int64_t new_size = size - previous_size;
|
||||
session->current_nghttp2_memory_ += new_size;
|
||||
session->env()->isolate()->AdjustAmountOfExternalAllocatedMemory(
|
||||
new_size);
|
||||
*reinterpret_cast<size_t*>(mem) = size;
|
||||
mem += sizeof(size_t);
|
||||
} else if (size == 0) {
|
||||
session->current_nghttp2_memory_ -= previous_size;
|
||||
session->env()->isolate()->AdjustAmountOfExternalAllocatedMemory(
|
||||
-static_cast<int64_t>(previous_size));
|
||||
}
|
||||
|
||||
return mem;
|
||||
@ -571,6 +580,8 @@ class Http2Session::MemoryAllocatorInfo {
|
||||
size_t* original_ptr = reinterpret_cast<size_t*>(
|
||||
static_cast<char*>(ptr) - sizeof(size_t));
|
||||
session->current_nghttp2_memory_ -= *original_ptr;
|
||||
session->env()->isolate()->AdjustAmountOfExternalAllocatedMemory(
|
||||
-static_cast<int64_t>(*original_ptr));
|
||||
*original_ptr = 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user