mirror of
https://github.com/openjdk/jdk18u.git
synced 2025-12-10 00:37:05 -06:00
8286198: [linux] Fix process-memory information
Backport-of: 9e320d9ab1813eda705d7318ef964092c50d1ade
This commit is contained in:
parent
3b7473cb28
commit
0b9bee7169
@ -2118,22 +2118,25 @@ void os::Linux::print_process_memory_info(outputStream* st) {
|
||||
// (note: there is no implementation of mallinfo for muslc)
|
||||
#ifdef __GLIBC__
|
||||
size_t total_allocated = 0;
|
||||
size_t free_retained = 0;
|
||||
bool might_have_wrapped = false;
|
||||
if (_mallinfo2 != NULL) {
|
||||
struct glibc_mallinfo2 mi = _mallinfo2();
|
||||
total_allocated = mi.uordblks;
|
||||
total_allocated = mi.uordblks + mi.hblkhd;
|
||||
free_retained = mi.fordblks;
|
||||
} else if (_mallinfo != NULL) {
|
||||
// mallinfo is an old API. Member names mean next to nothing and, beyond that, are int.
|
||||
// So values may have wrapped around. Still useful enough to see how much glibc thinks
|
||||
// we allocated.
|
||||
struct glibc_mallinfo mi = _mallinfo();
|
||||
total_allocated = (size_t)(unsigned)mi.uordblks;
|
||||
total_allocated = (size_t)(unsigned)mi.uordblks + (size_t)(unsigned)mi.hblkhd;
|
||||
free_retained = (size_t)(unsigned)mi.fordblks;
|
||||
// Since mallinfo members are int, glibc values may have wrapped. Warn about this.
|
||||
might_have_wrapped = (info.vmrss * K) > UINT_MAX && (info.vmrss * K) > (total_allocated + UINT_MAX);
|
||||
}
|
||||
if (_mallinfo2 != NULL || _mallinfo != NULL) {
|
||||
st->print_cr("C-Heap outstanding allocations: " SIZE_FORMAT "K%s",
|
||||
total_allocated / K,
|
||||
st->print_cr("C-Heap outstanding allocations: " SIZE_FORMAT "K, retained: " SIZE_FORMAT "K%s",
|
||||
total_allocated / K, free_retained / K,
|
||||
might_have_wrapped ? " (may have wrapped)" : "");
|
||||
}
|
||||
#endif // __GLIBC__
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user