Skip to content

Commit 1d3d64f

Browse files
committed
8255973: Add more logging to debug JDK-8255917
Reviewed-by: ccheung, stuefe, iklam
1 parent e32a4ea commit 1d3d64f

File tree

5 files changed

+44
-8
lines changed

5 files changed

+44
-8
lines changed

src/hotspot/share/logging/logTag.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@
118118
LOG_TAG(monitormismatch) \
119119
LOG_TAG(nestmates) \
120120
LOG_TAG(nmethod) \
121+
LOG_TAG(nmt) \
121122
LOG_TAG(normalize) \
122123
LOG_TAG(numa) \
123124
LOG_TAG(objecttagging) \

src/hotspot/share/runtime/os.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1668,6 +1668,9 @@ char* os::attempt_reserve_memory_at(char* addr, size_t bytes) {
16681668
char* result = pd_attempt_reserve_memory_at(addr, bytes);
16691669
if (result != NULL) {
16701670
MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC);
1671+
} else {
1672+
log_debug(os)("Attempt to reserve memory at " INTPTR_FORMAT " for "
1673+
SIZE_FORMAT " bytes failed, errno %d", p2i(addr), bytes, get_last_error());
16711674
}
16721675
return result;
16731676
}

src/hotspot/share/services/virtualMemoryTracker.cpp

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ size_t ReservedMemoryRegion::committed_size() const {
290290

291291
void ReservedMemoryRegion::set_flag(MEMFLAGS f) {
292292
assert((flag() == mtNone || flag() == f),
293-
"Overwrite memory type for region [" PTR_FORMAT "-" PTR_FORMAT "), %u->%u.",
293+
"Overwrite memory type for region [" INTPTR_FORMAT "-" INTPTR_FORMAT "), %u->%u.",
294294
p2i(base()), p2i(end()), (unsigned)flag(), (unsigned)f);
295295
if (flag() != f) {
296296
VirtualMemorySummary::move_reserved_memory(flag(), f, size());
@@ -343,6 +343,8 @@ bool VirtualMemoryTracker::add_reserved_region(address base_addr, size_t size,
343343
ReservedMemoryRegion rgn(base_addr, size, stack, flag);
344344
ReservedMemoryRegion* reserved_rgn = _reserved_regions->find(rgn);
345345

346+
log_debug(nmt)("Add reserved region \'%s\' (" INTPTR_FORMAT ", " SIZE_FORMAT ")",
347+
rgn.flag_name(), p2i(rgn.base()), rgn.size());
346348
if (reserved_rgn == NULL) {
347349
VirtualMemorySummary::record_reserved_memory(size, flag);
348350
return _reserved_regions->add(rgn) != NULL;
@@ -381,21 +383,25 @@ bool VirtualMemoryTracker::add_reserved_region(address base_addr, size_t size,
381383
// CDS reserves the whole region for mapping CDS archive, then maps each section into the region.
382384
// NMT reports CDS as a whole.
383385
if (reserved_rgn->flag() == mtClassShared) {
386+
log_debug(nmt)("CDS reserved region \'%s\' as a whole (" INTPTR_FORMAT ", " SIZE_FORMAT ")",
387+
reserved_rgn->flag_name(), p2i(reserved_rgn->base()), reserved_rgn->size());
384388
assert(reserved_rgn->contain_region(base_addr, size), "Reserved CDS region should contain this mapping region");
385389
return true;
386390
}
387391

388392
// Mapped CDS string region.
389393
// The string region(s) is part of the java heap.
390394
if (reserved_rgn->flag() == mtJavaHeap) {
395+
log_debug(nmt)("CDS reserved region \'%s\' as a whole (" INTPTR_FORMAT ", " SIZE_FORMAT ")",
396+
reserved_rgn->flag_name(), p2i(reserved_rgn->base()), reserved_rgn->size());
391397
assert(reserved_rgn->contain_region(base_addr, size), "Reserved heap region should contain this mapping region");
392398
return true;
393399
}
394400

395401
// Print some more details. Don't use UL here to avoid circularities.
396402
#ifdef ASSERT
397-
tty->print_cr("Error: existing region: [" PTR_FORMAT "-" PTR_FORMAT "), flag %u.\n"
398-
" new region: [" PTR_FORMAT "-" PTR_FORMAT "), flag %u.",
403+
tty->print_cr("Error: existing region: [" INTPTR_FORMAT "-" INTPTR_FORMAT "), flag %u.\n"
404+
" new region: [" INTPTR_FORMAT "-" INTPTR_FORMAT "), flag %u.",
399405
p2i(reserved_rgn->base()), p2i(reserved_rgn->end()), (unsigned)reserved_rgn->flag(),
400406
p2i(base_addr), p2i(base_addr + size), (unsigned)flag);
401407
#endif
@@ -430,9 +436,15 @@ bool VirtualMemoryTracker::add_committed_region(address addr, size_t size,
430436
ReservedMemoryRegion rgn(addr, size);
431437
ReservedMemoryRegion* reserved_rgn = _reserved_regions->find(rgn);
432438

433-
assert(reserved_rgn != NULL, "No reserved region");
439+
if (reserved_rgn == NULL) {
440+
log_debug(nmt)("Add committed region \'%s\', No reserved region found for (" INTPTR_FORMAT ", " SIZE_FORMAT ")",
441+
rgn.flag_name(), p2i(rgn.base()), rgn.size());
442+
}
443+
assert(reserved_rgn != NULL, "Add committed region, No reserved region found");
434444
assert(reserved_rgn->contain_region(addr, size), "Not completely contained");
435445
bool result = reserved_rgn->add_committed_region(addr, size, stack);
446+
log_debug(nmt)("Add committed region \'%s\'(" INTPTR_FORMAT ", " SIZE_FORMAT ") %s",
447+
rgn.flag_name(), p2i(rgn.base()), rgn.size(), (result ? "Succeeded" : "Failed"));
436448
return result;
437449
}
438450

@@ -443,9 +455,12 @@ bool VirtualMemoryTracker::remove_uncommitted_region(address addr, size_t size)
443455

444456
ReservedMemoryRegion rgn(addr, size);
445457
ReservedMemoryRegion* reserved_rgn = _reserved_regions->find(rgn);
446-
assert(reserved_rgn != NULL, "No reserved region");
458+
assert(reserved_rgn != NULL, "No reserved region (" INTPTR_FORMAT ", " SIZE_FORMAT ")", p2i(addr), size);
447459
assert(reserved_rgn->contain_region(addr, size), "Not completely contained");
460+
const char* flag_name = reserved_rgn->flag_name(); // after remove, info is not complete
448461
bool result = reserved_rgn->remove_uncommitted_region(addr, size);
462+
log_debug(nmt)("Removed uncommitted region \'%s\' (" INTPTR_FORMAT ", " SIZE_FORMAT ") %s",
463+
flag_name, p2i(addr), size, (result ? " Succeeded" : "Failed"));
449464
return result;
450465
}
451466

@@ -454,12 +469,19 @@ bool VirtualMemoryTracker::remove_released_region(ReservedMemoryRegion* rgn) {
454469
assert(_reserved_regions != NULL, "Sanity check");
455470

456471
// uncommit regions within the released region
457-
if (!rgn->remove_uncommitted_region(rgn->base(), rgn->size())) {
472+
ReservedMemoryRegion backup(*rgn);
473+
bool result = rgn->remove_uncommitted_region(rgn->base(), rgn->size());
474+
log_debug(nmt)("Remove uncommitted region \'%s\' (" INTPTR_FORMAT ", " SIZE_FORMAT ") %s",
475+
backup.flag_name(), p2i(backup.base()), backup.size(), (result ? "Succeeded" : "Failed"));
476+
if (!result) {
458477
return false;
459478
}
460479

461480
VirtualMemorySummary::record_released_memory(rgn->size(), rgn->flag());
462-
return _reserved_regions->remove(*rgn);
481+
result = _reserved_regions->remove(*rgn);
482+
log_debug(nmt)("Removed region \'%s\' (" INTPTR_FORMAT ", " SIZE_FORMAT ") from _resvered_regions %s" ,
483+
backup.flag_name(), p2i(backup.base()), backup.size(), (result ? "Succeeded" : "Failed"));
484+
return result;
463485
}
464486

465487
bool VirtualMemoryTracker::remove_released_region(address addr, size_t size) {
@@ -470,6 +492,10 @@ bool VirtualMemoryTracker::remove_released_region(address addr, size_t size) {
470492
ReservedMemoryRegion rgn(addr, size);
471493
ReservedMemoryRegion* reserved_rgn = _reserved_regions->find(rgn);
472494

495+
if (reserved_rgn == NULL) {
496+
log_debug(nmt)("No reserved region found for (" INTPTR_FORMAT ", " SIZE_FORMAT ")!",
497+
p2i(rgn.base()), rgn.size());
498+
}
473499
assert(reserved_rgn != NULL, "No reserved region");
474500
if (reserved_rgn->same_region(addr, size)) {
475501
return remove_released_region(reserved_rgn);
@@ -527,8 +553,10 @@ bool VirtualMemoryTracker::split_reserved_region(address addr, size_t size, size
527553
NativeCallStack original_stack = *reserved_rgn->call_stack();
528554
MEMFLAGS original_flags = reserved_rgn->flag();
529555

556+
const char* name = reserved_rgn->flag_name();
530557
remove_released_region(reserved_rgn);
531-
558+
log_debug(nmt)("Split region \'%s\' (" INTPTR_FORMAT ", " SIZE_FORMAT ") with size " SIZE_FORMAT,
559+
name, p2i(rgn.base()), rgn.size(), split);
532560
// Now, create two new regions.
533561
add_reserved_region(addr, split, original_stack, original_flags);
534562
add_reserved_region(addr + split, size - split, original_stack, original_flags);

src/hotspot/share/services/virtualMemoryTracker.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,8 @@ class ReservedMemoryRegion : public VirtualMemoryRegion {
340340
return *this;
341341
}
342342

343+
const char* flag_name() { return NMTUtil::flag_to_name(_flag); }
344+
343345
private:
344346
// The committed region contains the uncommitted region, subtract the uncommitted
345347
// region from this committed region

test/hotspot/jtreg/runtime/cds/SharedBaseAddress.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ public static void main(String[] args) throws Exception {
6060
.addPrefix("-XX:SharedBaseAddress=" + testEntry)
6161
.addPrefix("-Xlog:cds=debug")
6262
.addPrefix("-Xlog:cds+reloc=debug")
63+
.addPrefix("-Xlog:nmt=debug")
64+
.addPrefix("-Xlog:os=debug")
6365
.addPrefix("-XX:NativeMemoryTracking=detail");
6466

6567
CDSTestUtils.createArchiveAndCheck(opts);

0 commit comments

Comments
 (0)