/* * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. * */ #ifndef SHARE_VM_SERVICES_DIAGNOSTICCOMMAND_HPP #define SHARE_VM_SERVICES_DIAGNOSTICCOMMAND_HPP #include "runtime/arguments.hpp" #include "classfile/vmSymbols.hpp" #include "utilities/ostream.hpp" #include "runtime/vm_version.hpp" #include "runtime/vmThread.hpp" #include "runtime/os.hpp" #include "services/diagnosticArgument.hpp" #include "services/diagnosticCommand.hpp" #include "services/diagnosticFramework.hpp" #include "services/diagnosticCommand_ext.hpp" class HelpDCmd : public DCmdWithParser { protected: DCmdArgument _all; DCmdArgument _cmd; public: HelpDCmd(outputStream* output, bool heap); static const char* name() { return "help"; } static const char* description() { return "For more information about a specific command use 'help '. " "With no argument this will show a list of available commands. " "'help all' will show help for all commands."; } static const char* impact() { return "Low: "; } static int num_arguments(); virtual void execute(TRAPS); }; class VersionDCmd : public DCmd { public: VersionDCmd(outputStream* output, bool heap) : DCmd(output,heap) { } static const char* name() { return "VM.version"; } static const char* description() { return "Print JVM version information."; } static const char* impact() { return "Low: "; } static int num_arguments() { return 0; } virtual void execute(TRAPS); }; class CommandLineDCmd : public DCmd { public: CommandLineDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } static const char* name() { return "VM.command_line"; } static const char* description() { return "Print the command line used to start this VM instance."; } static const char* impact() { return "Low: "; } static int num_arguments() { return 0; } virtual void execute(TRAPS) { Arguments::print_on(_output); } }; // See also: get_system_properties in attachListener.cpp class PrintSystemPropertiesDCmd : public DCmd { public: PrintSystemPropertiesDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } static const char* name() { return "VM.system_properties"; } static const char* description() { return "Print system properties."; } static const char* impact() { return "Low: "; } static int num_arguments() { return 0; } virtual void execute(TRAPS); }; // See also: print_flag in attachListener.cpp class PrintVMFlagsDCmd : public DCmdWithParser { protected: DCmdArgument _all; public: PrintVMFlagsDCmd(outputStream* output, bool heap); static const char* name() { return "VM.flags"; } static const char* description() { return "Print VM flag options and their current values."; } static const char* impact() { return "Low: "; } static int num_arguments(); virtual void execute(TRAPS); }; class VMUptimeDCmd : public DCmdWithParser { protected: DCmdArgument _date; public: VMUptimeDCmd(outputStream* output, bool heap); static const char* name() { return "VM.uptime"; } static const char* description() { return "Print VM uptime."; } static const char* impact() { return "Low: "; } static int num_arguments(); virtual void execute(TRAPS); }; class SystemGCDCmd : public DCmd { public: SystemGCDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } static const char* name() { return "GC.run"; } static const char* description() { return "Call java.lang.System.gc()."; } static const char* impact() { return "Medium: Depends on Java heap size and content."; } static int num_arguments() { return 0; } virtual void execute(TRAPS); }; class RunFinalizationDCmd : public DCmd { public: RunFinalizationDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } static const char* name() { return "GC.run_finalization"; } static const char* description() { return "Call java.lang.System.runFinalization()."; } static const char* impact() { return "Medium: Depends on Java content."; } static int num_arguments() { return 0; } virtual void execute(TRAPS); }; #ifndef SERVICES_KERNEL // Heap dumping not supported // See also: dump_heap in attachListener.cpp class HeapDumpDCmd : public DCmdWithParser { protected: DCmdArgument _filename; DCmdArgument _all; public: HeapDumpDCmd(outputStream* output, bool heap); static const char* name() { return "GC.heap_dump"; } static const char* description() { return "Generate a HPROF format dump of the Java heap."; } static const char* impact() { return "High: Depends on Java heap size and content. " "Request a full GC unless the '-all' option is specified."; } static int num_arguments(); virtual void execute(TRAPS); }; #endif // SERVICES_KERNEL // See also: inspeactheap in attachListener.cpp class ClassHistogramDCmd : public DCmdWithParser { protected: DCmdArgument _all; public: ClassHistogramDCmd(outputStream* output, bool heap); static const char* name() { return "GC.class_histogram"; } static const char* description() { return "Provide statistics about the Java heap usage."; } static const char* impact() { return "High: Depends on Java heap size and content."; } static int num_arguments(); virtual void execute(TRAPS); }; // See also: thread_dump in attachListener.cpp class ThreadDumpDCmd : public DCmdWithParser { protected: DCmdArgument _locks; public: ThreadDumpDCmd(outputStream* output, bool heap); static const char* name() { return "Thread.print"; } static const char* description() { return "Print all threads with stacktraces."; } static const char* impact() { return "Medium: Depends on the number of threads."; } static int num_arguments(); virtual void execute(TRAPS); }; #endif // SHARE_VM_SERVICES_DIAGNOSTICCOMMAND_HPP