src/share/vm/services/diagnosticCommand.hpp

Mon, 31 Mar 2014 13:09:35 -0700

author
minqi
date
Mon, 31 Mar 2014 13:09:35 -0700
changeset 6535
f42c10a3d4b1
parent 5968
996d1f2f056f
child 6876
710a3c8b516e
child 8303
767f8c68255a
permissions
-rw-r--r--

7090324: gclog rotation via external tool
Summary: GC log rotation can be set via java command line, but customer sometime need to sync with OS level rotation setting.
Reviewed-by: sla, minqi, ehelin
Contributed-by: suenaga.yasumasa@lab.ntt.co.jp

fparain@3329 1 /*
acorn@4497 2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
fparain@3329 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
fparain@3329 4 *
fparain@3329 5 * This code is free software; you can redistribute it and/or modify it
fparain@3329 6 * under the terms of the GNU General Public License version 2 only, as
fparain@3329 7 * published by the Free Software Foundation.
fparain@3329 8 *
fparain@3329 9 * This code is distributed in the hope that it will be useful, but WITHOUT
fparain@3329 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fparain@3329 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
fparain@3329 12 * version 2 for more details (a copy is included in the LICENSE file that
fparain@3329 13 * accompanied this code).
fparain@3329 14 *
fparain@3329 15 * You should have received a copy of the GNU General Public License version
fparain@3329 16 * 2 along with this work; if not, write to the Free Software Foundation,
fparain@3329 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
fparain@3329 18 *
fparain@3329 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
fparain@3329 20 * or visit www.oracle.com if you need additional information or have any
fparain@3329 21 * questions.
fparain@3329 22 *
fparain@3329 23 */
fparain@3329 24
fparain@3329 25 #ifndef SHARE_VM_SERVICES_DIAGNOSTICCOMMAND_HPP
fparain@3329 26 #define SHARE_VM_SERVICES_DIAGNOSTICCOMMAND_HPP
fparain@3329 27
fparain@3329 28 #include "runtime/arguments.hpp"
fparain@3329 29 #include "classfile/vmSymbols.hpp"
fparain@3329 30 #include "utilities/ostream.hpp"
fparain@3329 31 #include "runtime/vm_version.hpp"
fparain@3329 32 #include "runtime/vmThread.hpp"
fparain@3329 33 #include "runtime/os.hpp"
fparain@3329 34 #include "services/diagnosticArgument.hpp"
fparain@3329 35 #include "services/diagnosticCommand.hpp"
fparain@3329 36 #include "services/diagnosticFramework.hpp"
dsamersoff@3478 37 #include "services/diagnosticCommand_ext.hpp"
jprovino@4542 38 #include "utilities/macros.hpp"
fparain@3329 39
fparain@3402 40 class HelpDCmd : public DCmdWithParser {
fparain@3329 41 protected:
fparain@3329 42 DCmdArgument<bool> _all;
fparain@3329 43 DCmdArgument<char*> _cmd;
fparain@3329 44 public:
fparain@3329 45 HelpDCmd(outputStream* output, bool heap);
fparain@3329 46 static const char* name() { return "help"; }
fparain@3329 47 static const char* description() {
fparain@3329 48 return "For more information about a specific command use 'help <command>'. "
fparain@3329 49 "With no argument this will show a list of available commands. "
fparain@3329 50 "'help all' will show help for all commands.";
fparain@3329 51 }
sla@3905 52 static const char* impact() { return "Low"; }
fparain@3329 53 static int num_arguments();
fparain@5047 54 virtual void execute(DCmdSource source, TRAPS);
fparain@3329 55 };
fparain@3329 56
fparain@3329 57 class VersionDCmd : public DCmd {
fparain@3329 58 public:
fparain@3329 59 VersionDCmd(outputStream* output, bool heap) : DCmd(output,heap) { }
fparain@3329 60 static const char* name() { return "VM.version"; }
fparain@3329 61 static const char* description() {
fparain@3329 62 return "Print JVM version information.";
fparain@3329 63 }
sla@3905 64 static const char* impact() { return "Low"; }
fparain@5047 65 static const JavaPermission permission() {
fparain@5047 66 JavaPermission p = {"java.util.PropertyPermission",
fparain@5047 67 "java.vm.version", "read"};
fparain@5047 68 return p;
fparain@5047 69 }
fparain@3329 70 static int num_arguments() { return 0; }
fparain@5047 71 virtual void execute(DCmdSource source, TRAPS);
fparain@3402 72 };
fparain@3402 73
fparain@3402 74 class CommandLineDCmd : public DCmd {
fparain@3402 75 public:
fparain@3402 76 CommandLineDCmd(outputStream* output, bool heap) : DCmd(output, heap) { }
fparain@3402 77 static const char* name() { return "VM.command_line"; }
fparain@3402 78 static const char* description() {
fparain@3402 79 return "Print the command line used to start this VM instance.";
fparain@3402 80 }
sla@3905 81 static const char* impact() { return "Low"; }
fparain@5047 82 static const JavaPermission permission() {
fparain@5047 83 JavaPermission p = {"java.lang.management.ManagementPermission",
fparain@5047 84 "monitor", NULL};
fparain@5047 85 return p;
fparain@5047 86 }
fparain@3402 87 static int num_arguments() { return 0; }
fparain@5047 88 virtual void execute(DCmdSource source, TRAPS) {
fparain@3402 89 Arguments::print_on(_output);
fparain@3402 90 }
fparain@3402 91 };
fparain@3402 92
fparain@3402 93 // See also: get_system_properties in attachListener.cpp
fparain@3402 94 class PrintSystemPropertiesDCmd : public DCmd {
fparain@3402 95 public:
fparain@3402 96 PrintSystemPropertiesDCmd(outputStream* output, bool heap) : DCmd(output, heap) { }
fparain@3402 97 static const char* name() { return "VM.system_properties"; }
fparain@3402 98 static const char* description() {
fparain@3402 99 return "Print system properties.";
fparain@3402 100 }
fparain@3402 101 static const char* impact() {
sla@3905 102 return "Low";
fparain@3402 103 }
fparain@5047 104 static const JavaPermission permission() {
fparain@5047 105 JavaPermission p = {"java.util.PropertyPermission",
fparain@5047 106 "*", "read"};
fparain@5047 107 return p;
fparain@5047 108 }
fparain@3402 109 static int num_arguments() { return 0; }
fparain@5047 110 virtual void execute(DCmdSource source, TRAPS);
fparain@3402 111 };
fparain@3402 112
fparain@3402 113 // See also: print_flag in attachListener.cpp
fparain@3402 114 class PrintVMFlagsDCmd : public DCmdWithParser {
fparain@3402 115 protected:
fparain@3402 116 DCmdArgument<bool> _all;
fparain@3402 117 public:
fparain@3402 118 PrintVMFlagsDCmd(outputStream* output, bool heap);
fparain@3402 119 static const char* name() { return "VM.flags"; }
fparain@3402 120 static const char* description() {
fparain@3402 121 return "Print VM flag options and their current values.";
fparain@3402 122 }
fparain@3402 123 static const char* impact() {
sla@3905 124 return "Low";
fparain@3402 125 }
fparain@5047 126 static const JavaPermission permission() {
fparain@5047 127 JavaPermission p = {"java.lang.management.ManagementPermission",
fparain@5047 128 "monitor", NULL};
fparain@5047 129 return p;
fparain@5047 130 }
fparain@3402 131 static int num_arguments();
fparain@5047 132 virtual void execute(DCmdSource source, TRAPS);
fparain@3402 133 };
fparain@3402 134
fparain@3402 135 class VMUptimeDCmd : public DCmdWithParser {
fparain@3402 136 protected:
fparain@3402 137 DCmdArgument<bool> _date;
fparain@3402 138 public:
fparain@3402 139 VMUptimeDCmd(outputStream* output, bool heap);
fparain@3402 140 static const char* name() { return "VM.uptime"; }
fparain@3402 141 static const char* description() {
fparain@3402 142 return "Print VM uptime.";
fparain@3402 143 }
fparain@3402 144 static const char* impact() {
sla@3905 145 return "Low";
fparain@3402 146 }
fparain@3402 147 static int num_arguments();
fparain@5047 148 virtual void execute(DCmdSource source, TRAPS);
fparain@3402 149 };
fparain@3402 150
fparain@3402 151 class SystemGCDCmd : public DCmd {
fparain@3402 152 public:
fparain@3402 153 SystemGCDCmd(outputStream* output, bool heap) : DCmd(output, heap) { }
fparain@3402 154 static const char* name() { return "GC.run"; }
fparain@3402 155 static const char* description() {
fparain@3402 156 return "Call java.lang.System.gc().";
fparain@3402 157 }
fparain@3402 158 static const char* impact() {
fparain@3402 159 return "Medium: Depends on Java heap size and content.";
fparain@3402 160 }
fparain@3402 161 static int num_arguments() { return 0; }
fparain@5047 162 virtual void execute(DCmdSource source, TRAPS);
fparain@3402 163 };
fparain@3402 164
fparain@3402 165 class RunFinalizationDCmd : public DCmd {
fparain@3402 166 public:
fparain@3402 167 RunFinalizationDCmd(outputStream* output, bool heap) : DCmd(output, heap) { }
fparain@3402 168 static const char* name() { return "GC.run_finalization"; }
fparain@3402 169 static const char* description() {
fparain@3402 170 return "Call java.lang.System.runFinalization().";
fparain@3402 171 }
fparain@3402 172 static const char* impact() {
fparain@3402 173 return "Medium: Depends on Java content.";
fparain@3402 174 }
fparain@3402 175 static int num_arguments() { return 0; }
fparain@5047 176 virtual void execute(DCmdSource source, TRAPS);
fparain@3402 177 };
fparain@3402 178
jprovino@4165 179 #if INCLUDE_SERVICES // Heap dumping supported
fparain@3402 180 // See also: dump_heap in attachListener.cpp
fparain@3402 181 class HeapDumpDCmd : public DCmdWithParser {
fparain@3402 182 protected:
fparain@3402 183 DCmdArgument<char*> _filename;
fparain@3402 184 DCmdArgument<bool> _all;
fparain@3402 185 public:
fparain@3402 186 HeapDumpDCmd(outputStream* output, bool heap);
fparain@3402 187 static const char* name() {
fparain@3402 188 return "GC.heap_dump";
fparain@3402 189 }
fparain@3402 190 static const char* description() {
fparain@3402 191 return "Generate a HPROF format dump of the Java heap.";
fparain@3402 192 }
fparain@3402 193 static const char* impact() {
fparain@3402 194 return "High: Depends on Java heap size and content. "
fparain@3402 195 "Request a full GC unless the '-all' option is specified.";
fparain@3402 196 }
fparain@5047 197 static const JavaPermission permission() {
fparain@5047 198 JavaPermission p = {"java.lang.management.ManagementPermission",
fparain@5047 199 "monitor", NULL};
fparain@5047 200 return p;
fparain@5047 201 }
fparain@3402 202 static int num_arguments();
fparain@5047 203 virtual void execute(DCmdSource source, TRAPS);
fparain@3402 204 };
jprovino@4165 205 #endif // INCLUDE_SERVICES
fparain@3402 206
acorn@4497 207 // See also: inspectheap in attachListener.cpp
fparain@3402 208 class ClassHistogramDCmd : public DCmdWithParser {
fparain@3402 209 protected:
fparain@3402 210 DCmdArgument<bool> _all;
fparain@3402 211 public:
fparain@3402 212 ClassHistogramDCmd(outputStream* output, bool heap);
fparain@3402 213 static const char* name() {
fparain@3402 214 return "GC.class_histogram";
fparain@3402 215 }
fparain@3402 216 static const char* description() {
fparain@3402 217 return "Provide statistics about the Java heap usage.";
fparain@3402 218 }
fparain@3402 219 static const char* impact() {
fparain@3402 220 return "High: Depends on Java heap size and content.";
fparain@3402 221 }
fparain@5047 222 static const JavaPermission permission() {
fparain@5047 223 JavaPermission p = {"java.lang.management.ManagementPermission",
fparain@5047 224 "monitor", NULL};
fparain@5047 225 return p;
fparain@5047 226 }
fparain@3402 227 static int num_arguments();
fparain@5047 228 virtual void execute(DCmdSource source, TRAPS);
fparain@3402 229 };
fparain@3402 230
acorn@4497 231 class ClassStatsDCmd : public DCmdWithParser {
acorn@4497 232 protected:
acorn@4497 233 DCmdArgument<bool> _all;
acorn@4497 234 DCmdArgument<bool> _csv;
acorn@4497 235 DCmdArgument<bool> _help;
acorn@4497 236 DCmdArgument<char*> _columns;
acorn@4497 237 public:
acorn@4497 238 ClassStatsDCmd(outputStream* output, bool heap);
acorn@4497 239 static const char* name() {
acorn@4497 240 return "GC.class_stats";
acorn@4497 241 }
acorn@4497 242 static const char* description() {
acorn@4497 243 return "Provide statistics about Java class meta data. Requires -XX:+UnlockDiagnosticVMOptions.";
acorn@4497 244 }
acorn@4497 245 static const char* impact() {
acorn@4497 246 return "High: Depends on Java heap size and content.";
acorn@4497 247 }
acorn@4497 248 static int num_arguments();
fparain@5047 249 virtual void execute(DCmdSource source, TRAPS);
acorn@4497 250 };
acorn@4497 251
fparain@3402 252 // See also: thread_dump in attachListener.cpp
fparain@3402 253 class ThreadDumpDCmd : public DCmdWithParser {
fparain@3402 254 protected:
fparain@3402 255 DCmdArgument<bool> _locks;
fparain@3402 256 public:
fparain@3402 257 ThreadDumpDCmd(outputStream* output, bool heap);
fparain@3402 258 static const char* name() { return "Thread.print"; }
fparain@3402 259 static const char* description() {
fparain@3402 260 return "Print all threads with stacktraces.";
fparain@3402 261 }
fparain@3402 262 static const char* impact() {
fparain@3402 263 return "Medium: Depends on the number of threads.";
fparain@3402 264 }
fparain@5047 265 static const JavaPermission permission() {
fparain@5047 266 JavaPermission p = {"java.lang.management.ManagementPermission",
fparain@5047 267 "monitor", NULL};
fparain@5047 268 return p;
fparain@5047 269 }
fparain@3402 270 static int num_arguments();
fparain@5047 271 virtual void execute(DCmdSource source, TRAPS);
fparain@3329 272 };
fparain@3329 273
dsamersoff@3598 274 // Enhanced JMX Agent support
dsamersoff@3598 275
dsamersoff@3598 276 class JMXStartRemoteDCmd : public DCmdWithParser {
dsamersoff@3598 277
dsamersoff@3598 278 // Explicitly list all properties that could be
dsamersoff@3598 279 // passed to Agent.startRemoteManagementAgent()
dsamersoff@3598 280 // com.sun.management is omitted
dsamersoff@3598 281
dsamersoff@3598 282 DCmdArgument<char *> _config_file;
dsamersoff@3598 283 DCmdArgument<char *> _jmxremote_port;
dsamersoff@3598 284 DCmdArgument<char *> _jmxremote_rmi_port;
dsamersoff@3598 285 DCmdArgument<char *> _jmxremote_ssl;
dsamersoff@3598 286 DCmdArgument<char *> _jmxremote_registry_ssl;
dsamersoff@3598 287 DCmdArgument<char *> _jmxremote_authenticate;
dsamersoff@3598 288 DCmdArgument<char *> _jmxremote_password_file;
dsamersoff@3598 289 DCmdArgument<char *> _jmxremote_access_file;
dsamersoff@3598 290 DCmdArgument<char *> _jmxremote_login_config;
dsamersoff@3598 291 DCmdArgument<char *> _jmxremote_ssl_enabled_cipher_suites;
dsamersoff@3598 292 DCmdArgument<char *> _jmxremote_ssl_enabled_protocols;
dsamersoff@3598 293 DCmdArgument<char *> _jmxremote_ssl_need_client_auth;
dsamersoff@3598 294 DCmdArgument<char *> _jmxremote_ssl_config_file;
dsamersoff@3598 295
dsamersoff@4520 296 // JDP support
dsamersoff@4520 297 // Keep autodiscovery char* not bool to pass true/false
dsamersoff@4520 298 // as property value to java level.
dsamersoff@4520 299 DCmdArgument<char *> _jmxremote_autodiscovery;
dsamersoff@4520 300 DCmdArgument<jlong> _jdp_port;
dsamersoff@4520 301 DCmdArgument<char *> _jdp_address;
dsamersoff@4520 302 DCmdArgument<char *> _jdp_source_addr;
dsamersoff@4520 303 DCmdArgument<jlong> _jdp_ttl;
dsamersoff@4520 304 DCmdArgument<jlong> _jdp_pause;
dsamersoff@5968 305 DCmdArgument<char *> _jdp_name;
dsamersoff@4520 306
dsamersoff@3598 307 public:
dsamersoff@3598 308 JMXStartRemoteDCmd(outputStream *output, bool heap_allocated);
dsamersoff@3598 309
dsamersoff@3598 310 static const char *name() {
dsamersoff@3598 311 return "ManagementAgent.start";
dsamersoff@3598 312 }
dsamersoff@3598 313
dsamersoff@3598 314 static const char *description() {
dsamersoff@3598 315 return "Start remote management agent.";
dsamersoff@3598 316 }
dsamersoff@3598 317
dsamersoff@3598 318 static int num_arguments();
dsamersoff@3598 319
fparain@5047 320 virtual void execute(DCmdSource source, TRAPS);
dsamersoff@3598 321
dsamersoff@3598 322 };
dsamersoff@3598 323
dsamersoff@3598 324 class JMXStartLocalDCmd : public DCmd {
dsamersoff@3598 325
dsamersoff@3598 326 // Explicitly request start of local agent,
dsamersoff@3598 327 // it will not be started by start dcmd
dsamersoff@3598 328
dsamersoff@3598 329
dsamersoff@3598 330 public:
dsamersoff@3598 331 JMXStartLocalDCmd(outputStream *output, bool heap_allocated);
dsamersoff@3598 332
dsamersoff@3598 333 static const char *name() {
dsamersoff@3598 334 return "ManagementAgent.start_local";
dsamersoff@3598 335 }
dsamersoff@3598 336
dsamersoff@3598 337 static const char *description() {
dsamersoff@3598 338 return "Start local management agent.";
dsamersoff@3598 339 }
dsamersoff@3598 340
fparain@5047 341 virtual void execute(DCmdSource source, TRAPS);
dsamersoff@3598 342
dsamersoff@3598 343 };
dsamersoff@3598 344
dsamersoff@3598 345 class JMXStopRemoteDCmd : public DCmd {
dsamersoff@3598 346 public:
dsamersoff@3598 347 JMXStopRemoteDCmd(outputStream *output, bool heap_allocated) :
dsamersoff@3598 348 DCmd(output, heap_allocated) {
dsamersoff@3598 349 // Do Nothing
dsamersoff@3598 350 }
dsamersoff@3598 351
dsamersoff@3598 352 static const char *name() {
dsamersoff@3598 353 return "ManagementAgent.stop";
dsamersoff@3598 354 }
dsamersoff@3598 355
dsamersoff@3598 356 static const char *description() {
dsamersoff@3598 357 return "Stop remote management agent.";
dsamersoff@3598 358 }
dsamersoff@3598 359
fparain@5047 360 virtual void execute(DCmdSource source, TRAPS);
dsamersoff@3598 361 };
dsamersoff@3598 362
minqi@6535 363 class RotateGCLogDCmd : public DCmd {
minqi@6535 364 public:
minqi@6535 365 RotateGCLogDCmd(outputStream* output, bool heap) : DCmd(output, heap) {}
minqi@6535 366 static const char* name() { return "GC.rotate_log"; }
minqi@6535 367 static const char* description() {
minqi@6535 368 return "Force the GC log file to be rotated.";
minqi@6535 369 }
minqi@6535 370 static const char* impact() { return "Low"; }
minqi@6535 371 virtual void execute(DCmdSource source, TRAPS);
minqi@6535 372 static int num_arguments() { return 0; }
minqi@6535 373 static const JavaPermission permission() {
minqi@6535 374 JavaPermission p = {"java.lang.management.ManagementPermission",
minqi@6535 375 "control", NULL};
minqi@6535 376 return p;
minqi@6535 377 }
minqi@6535 378 };
minqi@6535 379
fparain@3329 380 #endif // SHARE_VM_SERVICES_DIAGNOSTICCOMMAND_HPP

mercurial