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