mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-10 08:01:54 +00:00
8357828: add timestamps to jcmd diagnostic commands
This commit is contained in:
parent
73df06c80c
commit
cb9cab9d5b
@ -1344,13 +1344,11 @@ public:
|
||||
void Threads::print_on(outputStream* st, bool print_stacks,
|
||||
bool internal_format, bool print_concurrent_locks,
|
||||
bool print_extended_info) {
|
||||
char buf[32];
|
||||
st->print_raw_cr(os::local_time_string(buf, sizeof(buf)));
|
||||
|
||||
st->print_cr("Full thread dump %s (%s %s)",
|
||||
VM_Version::vm_name(),
|
||||
VM_Version::vm_release(),
|
||||
VM_Version::vm_info_string());
|
||||
char buf[32];
|
||||
JDK_Version::current().to_string(buf, sizeof(buf));
|
||||
const char* runtime_name = JDK_Version::runtime_name() != nullptr ?
|
||||
JDK_Version::runtime_name() : "";
|
||||
|
||||
@ -183,6 +183,12 @@ static int compare_strings(const char** s1, const char** s2) {
|
||||
return ::strcmp(*s1, *s2);
|
||||
}
|
||||
|
||||
static void print_local_time(outputStream* output) {
|
||||
char buf[32];
|
||||
output->print_cr("%s", os::local_time_string(buf, sizeof(buf)));
|
||||
}
|
||||
|
||||
|
||||
void HelpDCmd::execute(DCmdSource source, TRAPS) {
|
||||
if (_all.value()) {
|
||||
GrowableArray<const char*>* cmd_list = DCmdFactory::DCmd_list(source);
|
||||
@ -250,6 +256,7 @@ PrintVMFlagsDCmd::PrintVMFlagsDCmd(outputStream* output, bool heap) :
|
||||
}
|
||||
|
||||
void PrintVMFlagsDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
if (_all.value()) {
|
||||
JVMFlag::printFlags(output(), true);
|
||||
} else {
|
||||
@ -398,6 +405,7 @@ void VMUptimeDCmd::execute(DCmdSource source, TRAPS) {
|
||||
}
|
||||
|
||||
void VMInfoDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
VMError::print_vm_info(_output);
|
||||
}
|
||||
|
||||
@ -414,11 +422,13 @@ void RunFinalizationDCmd::execute(DCmdSource source, TRAPS) {
|
||||
}
|
||||
|
||||
void HeapInfoDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
MutexLocker hl(THREAD, Heap_lock);
|
||||
Universe::heap()->print_heap_on(output());
|
||||
}
|
||||
|
||||
void FinalizerInfoDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
ResourceMark rm(THREAD);
|
||||
|
||||
if (!InstanceKlass::is_finalization_enabled()) {
|
||||
@ -492,6 +502,7 @@ HeapDumpDCmd::HeapDumpDCmd(outputStream* output, bool heap) :
|
||||
}
|
||||
|
||||
void HeapDumpDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
jlong level = -1; // -1 means no compression.
|
||||
jlong parallel = HeapDumper::default_num_of_dump_threads();
|
||||
|
||||
@ -539,6 +550,7 @@ ClassHistogramDCmd::ClassHistogramDCmd(outputStream* output, bool heap) :
|
||||
}
|
||||
|
||||
void ClassHistogramDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
jlong num = _parallel_thread_num.value();
|
||||
if (num < 0) {
|
||||
output()->print_cr("Parallel thread number out of range (>=0): " JLONG_FORMAT, num);
|
||||
@ -564,6 +576,7 @@ ThreadDumpDCmd::ThreadDumpDCmd(outputStream* output, bool heap) :
|
||||
}
|
||||
|
||||
void ThreadDumpDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
// thread stacks and JNI global handles
|
||||
VM_PrintThreads op1(output(), _locks.value(), _extended.value(), true /* print JNI handle info */);
|
||||
VMThread::execute(&op1);
|
||||
@ -801,6 +814,7 @@ JMXStatusDCmd::JMXStatusDCmd(outputStream *output, bool heap_allocated) :
|
||||
}
|
||||
|
||||
void JMXStatusDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
ResourceMark rm(THREAD);
|
||||
HandleMark hm(THREAD);
|
||||
|
||||
@ -834,20 +848,24 @@ VMDynamicLibrariesDCmd::VMDynamicLibrariesDCmd(outputStream *output, bool heap_a
|
||||
}
|
||||
|
||||
void VMDynamicLibrariesDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
os::print_dll_info(output());
|
||||
output()->cr();
|
||||
}
|
||||
|
||||
void CompileQueueDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
VM_PrintCompileQueue printCompileQueueOp(output());
|
||||
VMThread::execute(&printCompileQueueOp);
|
||||
}
|
||||
|
||||
void CodeListDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
CodeCache::print_codelist(output());
|
||||
}
|
||||
|
||||
void CodeCacheDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
CodeCache::print_layout(output());
|
||||
}
|
||||
|
||||
@ -860,6 +878,7 @@ PerfMapDCmd::PerfMapDCmd(outputStream* output, bool heap) :
|
||||
}
|
||||
|
||||
void PerfMapDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
CodeCache::write_perf_map(_filename.value(), output());
|
||||
}
|
||||
#endif // LINUX
|
||||
@ -874,6 +893,8 @@ CodeHeapAnalyticsDCmd::CodeHeapAnalyticsDCmd(outputStream* output, bool heap) :
|
||||
}
|
||||
|
||||
void CodeHeapAnalyticsDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
|
||||
jlong granularity = _granularity.value();
|
||||
if (granularity < 1) {
|
||||
Exceptions::fthrow(THREAD_AND_LOCATION, vmSymbols::java_lang_IllegalArgumentException(),
|
||||
@ -895,6 +916,7 @@ EventLogDCmd::EventLogDCmd(outputStream* output, bool heap) :
|
||||
}
|
||||
|
||||
void EventLogDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
int max = (int)_max.value();
|
||||
if (max < 0) {
|
||||
output()->print_cr("Invalid max option: \"%d\".", max);
|
||||
@ -909,6 +931,7 @@ void EventLogDCmd::execute(DCmdSource source, TRAPS) {
|
||||
}
|
||||
|
||||
void CompilerDirectivesPrintDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
DirectivesStack::print(output());
|
||||
}
|
||||
|
||||
@ -929,6 +952,7 @@ void CompilerDirectivesRemoveDCmd::execute(DCmdSource source, TRAPS) {
|
||||
void CompilerDirectivesClearDCmd::execute(DCmdSource source, TRAPS) {
|
||||
DirectivesStack::clear();
|
||||
}
|
||||
|
||||
#if INCLUDE_SERVICES
|
||||
ClassHierarchyDCmd::ClassHierarchyDCmd(outputStream* output, bool heap) :
|
||||
DCmdWithParser(output, heap),
|
||||
@ -945,6 +969,7 @@ ClassHierarchyDCmd::ClassHierarchyDCmd(outputStream* output, bool heap) :
|
||||
}
|
||||
|
||||
void ClassHierarchyDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
VM_PrintClassHierarchy printClassHierarchyOp(output(), _print_interfaces.value(),
|
||||
_print_subclasses.value(), _classname.value());
|
||||
VMThread::execute(&printClassHierarchyOp);
|
||||
@ -982,6 +1007,7 @@ public:
|
||||
};
|
||||
|
||||
void ClassesDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
VM_PrintClasses vmop(output(), _verbose.value());
|
||||
VMThread::execute(&vmop);
|
||||
}
|
||||
@ -1000,6 +1026,7 @@ DumpSharedArchiveDCmd::DumpSharedArchiveDCmd(outputStream* output, bool heap) :
|
||||
}
|
||||
|
||||
void DumpSharedArchiveDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
jboolean is_static;
|
||||
const char* scmd = _suboption.value();
|
||||
|
||||
@ -1063,6 +1090,7 @@ ThreadDumpToFileDCmd::ThreadDumpToFileDCmd(outputStream* output, bool heap) :
|
||||
}
|
||||
|
||||
void ThreadDumpToFileDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
bool json = (_format.value() != nullptr) && (strcmp(_format.value(), "json") == 0);
|
||||
char* path = _filepath.value();
|
||||
bool overwrite = _overwrite.value();
|
||||
@ -1140,10 +1168,12 @@ static void execute_vthread_command(Symbol* method_name, outputStream* output, T
|
||||
}
|
||||
|
||||
void VThreadSchedulerDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
execute_vthread_command(vmSymbols::printScheduler_name(), output(), CHECK);
|
||||
}
|
||||
|
||||
void VThreadPollersDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
execute_vthread_command(vmSymbols::printPollers_name(), output(), CHECK);
|
||||
}
|
||||
|
||||
@ -1158,6 +1188,7 @@ CompilationMemoryStatisticDCmd::CompilationMemoryStatisticDCmd(outputStream* out
|
||||
}
|
||||
|
||||
void CompilationMemoryStatisticDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
const size_t minsize = _minsize.has_value() ? _minsize.value()._size : 0;
|
||||
CompilationMemoryStatistic::print_jcmd_report(output(), _verbose.value(), _legend.value(), minsize);
|
||||
}
|
||||
@ -1167,6 +1198,7 @@ void CompilationMemoryStatisticDCmd::execute(DCmdSource source, TRAPS) {
|
||||
SystemMapDCmd::SystemMapDCmd(outputStream* output, bool heap) : DCmd(output, heap) {}
|
||||
|
||||
void SystemMapDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
MemMapPrinter::print_all_mappings(output());
|
||||
}
|
||||
|
||||
@ -1179,6 +1211,7 @@ SystemDumpMapDCmd::SystemDumpMapDCmd(outputStream* output, bool heap) :
|
||||
}
|
||||
|
||||
void SystemDumpMapDCmd::execute(DCmdSource source, TRAPS) {
|
||||
print_local_time(output());
|
||||
const char* name = _filename.value();
|
||||
if (name == nullptr || name[0] == 0) {
|
||||
output()->print_cr("filename is empty or not specified. No file written");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user