307 _option.value(), output());
308 }
309 }
310
311 int JVMTIAgentLoadDCmd::num_arguments() {
312 ResourceMark rm;
313 JVMTIAgentLoadDCmd* dcmd = new JVMTIAgentLoadDCmd(NULL, false);
314 if (dcmd != NULL) {
315 DCmdMark mark(dcmd);
316 return dcmd->_dcmdparser.num_arguments();
317 } else {
318 return 0;
319 }
320 }
321 #endif // INCLUDE_SERVICES
322
323 void PrintSystemPropertiesDCmd::execute(DCmdSource source, TRAPS) {
324 // load VMSupport
325 Symbol* klass = vmSymbols::jdk_internal_vm_VMSupport();
326 Klass* k = SystemDictionary::resolve_or_fail(klass, true, CHECK);
327 instanceKlassHandle ik (THREAD, k);
328 if (ik->should_be_initialized()) {
329 ik->initialize(THREAD);
330 }
331 if (HAS_PENDING_EXCEPTION) {
332 java_lang_Throwable::print(PENDING_EXCEPTION, output());
333 output()->cr();
334 CLEAR_PENDING_EXCEPTION;
335 return;
336 }
337
338 // invoke the serializePropertiesToByteArray method
339 JavaValue result(T_OBJECT);
340 JavaCallArguments args;
341
342 Symbol* signature = vmSymbols::serializePropertiesToByteArray_signature();
343 JavaCalls::call_static(&result,
344 ik,
345 vmSymbols::serializePropertiesToByteArray_name(),
346 signature,
347 &args,
388 } else {
389 return 0;
390 }
391 }
392
393 void VMInfoDCmd::execute(DCmdSource source, TRAPS) {
394 VMError::print_vm_info(_output);
395 }
396
397 void SystemGCDCmd::execute(DCmdSource source, TRAPS) {
398 if (!DisableExplicitGC) {
399 Universe::heap()->collect(GCCause::_dcmd_gc_run);
400 } else {
401 output()->print_cr("Explicit GC is disabled, no GC has been performed.");
402 }
403 }
404
405 void RunFinalizationDCmd::execute(DCmdSource source, TRAPS) {
406 Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(),
407 true, CHECK);
408 instanceKlassHandle klass(THREAD, k);
409 JavaValue result(T_VOID);
410 JavaCalls::call_static(&result, klass,
411 vmSymbols::run_finalization_name(),
412 vmSymbols::void_method_signature(), CHECK);
413 }
414
415 void HeapInfoDCmd::execute(DCmdSource source, TRAPS) {
416 MutexLocker hl(Heap_lock);
417 Universe::heap()->print_on(output());
418 }
419
420 void FinalizerInfoDCmd::execute(DCmdSource source, TRAPS) {
421 ResourceMark rm;
422
423 Klass* k = SystemDictionary::resolve_or_fail(
424 vmSymbols::finalizer_histogram_klass(), true, CHECK);
425
426 instanceKlassHandle klass(THREAD, k);
427 JavaValue result(T_ARRAY);
428
429 // We are calling lang.ref.FinalizerHistogram.getFinalizerHistogram() method
430 // and expect it to return array of FinalizerHistogramEntry as Object[]
431
432 JavaCalls::call_static(&result, klass,
433 vmSymbols::get_finalizer_histogram_name(),
434 vmSymbols::void_finalizer_histogram_entry_array_signature(), CHECK);
435
436 objArrayOop result_oop = (objArrayOop) result.get_jobject();
437 if (result_oop->length() == 0) {
438 output()->print_cr("No instances waiting for finalization found");
439 return;
440 }
441
442 oop foop = result_oop->obj_at(0);
443 InstanceKlass* ik = InstanceKlass::cast(foop->klass());
444
445 fieldDescriptor count_fd, name_fd;
446
447 Klass* count_res = ik->find_field(
448 vmSymbols::finalizer_histogram_entry_count_field(), vmSymbols::int_signature(), &count_fd);
449
450 Klass* name_res = ik->find_field(
451 vmSymbols::finalizer_histogram_entry_name_field(), vmSymbols::string_signature(), &name_fd);
452
736 if (dcmd != NULL) {
737 DCmdMark mark(dcmd);
738 return dcmd->_dcmdparser.num_arguments();
739 } else {
740 return 0;
741 }
742 }
743
744
745 void JMXStartRemoteDCmd::execute(DCmdSource source, TRAPS) {
746 ResourceMark rm(THREAD);
747 HandleMark hm(THREAD);
748
749 // Load and initialize the jdk.internal.agent.Agent class
750 // invoke startRemoteManagementAgent(string) method to start
751 // the remote management server.
752 // throw java.lang.NoSuchMethodError if the method doesn't exist
753
754 Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
755 Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
756 instanceKlassHandle ik (THREAD, k);
757
758 JavaValue result(T_VOID);
759
760 // Pass all command line arguments to java as key=value,...
761 // All checks are done on java side
762
763 int len = 0;
764 stringStream options;
765 char comma[2] = {0,0};
766
767 // Leave default values on Agent.class side and pass only
768 // agruments explicitly set by user. All arguments passed
769 // to jcmd override properties with the same name set by
770 // command line with -D or by managmenent.properties
771 // file.
772 #define PUT_OPTION(a) \
773 do { \
774 if ( (a).is_set() ){ \
775 if ( *((a).type()) == 'I' ) { \
776 options.print("%scom.sun.management.%s=" JLONG_FORMAT, comma, (a).name(), (jlong)((a).value())); \
790 PUT_OPTION(_jmxremote_registry_ssl);
791 PUT_OPTION(_jmxremote_authenticate);
792 PUT_OPTION(_jmxremote_password_file);
793 PUT_OPTION(_jmxremote_access_file);
794 PUT_OPTION(_jmxremote_login_config);
795 PUT_OPTION(_jmxremote_ssl_enabled_cipher_suites);
796 PUT_OPTION(_jmxremote_ssl_enabled_protocols);
797 PUT_OPTION(_jmxremote_ssl_need_client_auth);
798 PUT_OPTION(_jmxremote_ssl_config_file);
799 PUT_OPTION(_jmxremote_autodiscovery);
800 PUT_OPTION(_jdp_port);
801 PUT_OPTION(_jdp_address);
802 PUT_OPTION(_jdp_source_addr);
803 PUT_OPTION(_jdp_ttl);
804 PUT_OPTION(_jdp_pause);
805 PUT_OPTION(_jdp_name);
806
807 #undef PUT_OPTION
808
809 Handle str = java_lang_String::create_from_str(options.as_string(), CHECK);
810 JavaCalls::call_static(&result, ik, vmSymbols::startRemoteAgent_name(), vmSymbols::string_void_signature(), str, CHECK);
811 }
812
813 JMXStartLocalDCmd::JMXStartLocalDCmd(outputStream *output, bool heap_allocated) :
814 DCmd(output, heap_allocated) {
815 // do nothing
816 }
817
818 void JMXStartLocalDCmd::execute(DCmdSource source, TRAPS) {
819 ResourceMark rm(THREAD);
820 HandleMark hm(THREAD);
821
822 // Load and initialize the jdk.internal.agent.Agent class
823 // invoke startLocalManagementAgent(void) method to start
824 // the local management server
825 // throw java.lang.NoSuchMethodError if method doesn't exist
826
827 Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
828 Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
829 instanceKlassHandle ik (THREAD, k);
830
831 JavaValue result(T_VOID);
832 JavaCalls::call_static(&result, ik, vmSymbols::startLocalAgent_name(), vmSymbols::void_method_signature(), CHECK);
833 }
834
835 void JMXStopRemoteDCmd::execute(DCmdSource source, TRAPS) {
836 ResourceMark rm(THREAD);
837 HandleMark hm(THREAD);
838
839 // Load and initialize the jdk.internal.agent.Agent class
840 // invoke stopRemoteManagementAgent method to stop the
841 // management server
842 // throw java.lang.NoSuchMethodError if method doesn't exist
843
844 Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
845 Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
846 instanceKlassHandle ik (THREAD, k);
847
848 JavaValue result(T_VOID);
849 JavaCalls::call_static(&result, ik, vmSymbols::stopRemoteAgent_name(), vmSymbols::void_method_signature(), CHECK);
850 }
851
852 JMXStatusDCmd::JMXStatusDCmd(outputStream *output, bool heap_allocated) :
853 DCmd(output, heap_allocated) {
854 // do nothing
855 }
856
857 void JMXStatusDCmd::execute(DCmdSource source, TRAPS) {
858 ResourceMark rm(THREAD);
859 HandleMark hm(THREAD);
860
861 // Load and initialize the jdk.internal.agent.Agent class
862 // invoke getManagementAgentStatus() method to generate the status info
863 // throw java.lang.NoSuchMethodError if method doesn't exist
864
865 Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
866 Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
867 instanceKlassHandle ik (THREAD, k);
868
869 JavaValue result(T_OBJECT);
870 JavaCalls::call_static(&result, ik, vmSymbols::getAgentStatus_name(), vmSymbols::void_string_signature(), CHECK);
871
872 jvalue* jv = (jvalue*) result.get_value_addr();
873 oop str = (oop) jv->l;
874 if (str != NULL) {
875 char* out = java_lang_String::as_utf8_string(str);
876 if (out) {
877 output()->print_cr("%s", out);
878 return;
879 }
880 }
881 output()->print_cr("Error obtaining management agent status");
882 }
883
884 VMDynamicLibrariesDCmd::VMDynamicLibrariesDCmd(outputStream *output, bool heap_allocated) :
885 DCmd(output, heap_allocated) {
886 // do nothing
887 }
888
889 void VMDynamicLibrariesDCmd::execute(DCmdSource source, TRAPS) {
890 os::print_dll_info(output());
|
307 _option.value(), output());
308 }
309 }
310
311 int JVMTIAgentLoadDCmd::num_arguments() {
312 ResourceMark rm;
313 JVMTIAgentLoadDCmd* dcmd = new JVMTIAgentLoadDCmd(NULL, false);
314 if (dcmd != NULL) {
315 DCmdMark mark(dcmd);
316 return dcmd->_dcmdparser.num_arguments();
317 } else {
318 return 0;
319 }
320 }
321 #endif // INCLUDE_SERVICES
322
323 void PrintSystemPropertiesDCmd::execute(DCmdSource source, TRAPS) {
324 // load VMSupport
325 Symbol* klass = vmSymbols::jdk_internal_vm_VMSupport();
326 Klass* k = SystemDictionary::resolve_or_fail(klass, true, CHECK);
327 InstanceKlass* ik = InstanceKlass::cast(k);
328 if (ik->should_be_initialized()) {
329 ik->initialize(THREAD);
330 }
331 if (HAS_PENDING_EXCEPTION) {
332 java_lang_Throwable::print(PENDING_EXCEPTION, output());
333 output()->cr();
334 CLEAR_PENDING_EXCEPTION;
335 return;
336 }
337
338 // invoke the serializePropertiesToByteArray method
339 JavaValue result(T_OBJECT);
340 JavaCallArguments args;
341
342 Symbol* signature = vmSymbols::serializePropertiesToByteArray_signature();
343 JavaCalls::call_static(&result,
344 ik,
345 vmSymbols::serializePropertiesToByteArray_name(),
346 signature,
347 &args,
388 } else {
389 return 0;
390 }
391 }
392
393 void VMInfoDCmd::execute(DCmdSource source, TRAPS) {
394 VMError::print_vm_info(_output);
395 }
396
397 void SystemGCDCmd::execute(DCmdSource source, TRAPS) {
398 if (!DisableExplicitGC) {
399 Universe::heap()->collect(GCCause::_dcmd_gc_run);
400 } else {
401 output()->print_cr("Explicit GC is disabled, no GC has been performed.");
402 }
403 }
404
405 void RunFinalizationDCmd::execute(DCmdSource source, TRAPS) {
406 Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(),
407 true, CHECK);
408 JavaValue result(T_VOID);
409 JavaCalls::call_static(&result, k,
410 vmSymbols::run_finalization_name(),
411 vmSymbols::void_method_signature(), CHECK);
412 }
413
414 void HeapInfoDCmd::execute(DCmdSource source, TRAPS) {
415 MutexLocker hl(Heap_lock);
416 Universe::heap()->print_on(output());
417 }
418
419 void FinalizerInfoDCmd::execute(DCmdSource source, TRAPS) {
420 ResourceMark rm;
421
422 Klass* k = SystemDictionary::resolve_or_fail(
423 vmSymbols::finalizer_histogram_klass(), true, CHECK);
424
425 JavaValue result(T_ARRAY);
426
427 // We are calling lang.ref.FinalizerHistogram.getFinalizerHistogram() method
428 // and expect it to return array of FinalizerHistogramEntry as Object[]
429
430 JavaCalls::call_static(&result, k,
431 vmSymbols::get_finalizer_histogram_name(),
432 vmSymbols::void_finalizer_histogram_entry_array_signature(), CHECK);
433
434 objArrayOop result_oop = (objArrayOop) result.get_jobject();
435 if (result_oop->length() == 0) {
436 output()->print_cr("No instances waiting for finalization found");
437 return;
438 }
439
440 oop foop = result_oop->obj_at(0);
441 InstanceKlass* ik = InstanceKlass::cast(foop->klass());
442
443 fieldDescriptor count_fd, name_fd;
444
445 Klass* count_res = ik->find_field(
446 vmSymbols::finalizer_histogram_entry_count_field(), vmSymbols::int_signature(), &count_fd);
447
448 Klass* name_res = ik->find_field(
449 vmSymbols::finalizer_histogram_entry_name_field(), vmSymbols::string_signature(), &name_fd);
450
734 if (dcmd != NULL) {
735 DCmdMark mark(dcmd);
736 return dcmd->_dcmdparser.num_arguments();
737 } else {
738 return 0;
739 }
740 }
741
742
743 void JMXStartRemoteDCmd::execute(DCmdSource source, TRAPS) {
744 ResourceMark rm(THREAD);
745 HandleMark hm(THREAD);
746
747 // Load and initialize the jdk.internal.agent.Agent class
748 // invoke startRemoteManagementAgent(string) method to start
749 // the remote management server.
750 // throw java.lang.NoSuchMethodError if the method doesn't exist
751
752 Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
753 Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
754
755 JavaValue result(T_VOID);
756
757 // Pass all command line arguments to java as key=value,...
758 // All checks are done on java side
759
760 int len = 0;
761 stringStream options;
762 char comma[2] = {0,0};
763
764 // Leave default values on Agent.class side and pass only
765 // agruments explicitly set by user. All arguments passed
766 // to jcmd override properties with the same name set by
767 // command line with -D or by managmenent.properties
768 // file.
769 #define PUT_OPTION(a) \
770 do { \
771 if ( (a).is_set() ){ \
772 if ( *((a).type()) == 'I' ) { \
773 options.print("%scom.sun.management.%s=" JLONG_FORMAT, comma, (a).name(), (jlong)((a).value())); \
787 PUT_OPTION(_jmxremote_registry_ssl);
788 PUT_OPTION(_jmxremote_authenticate);
789 PUT_OPTION(_jmxremote_password_file);
790 PUT_OPTION(_jmxremote_access_file);
791 PUT_OPTION(_jmxremote_login_config);
792 PUT_OPTION(_jmxremote_ssl_enabled_cipher_suites);
793 PUT_OPTION(_jmxremote_ssl_enabled_protocols);
794 PUT_OPTION(_jmxremote_ssl_need_client_auth);
795 PUT_OPTION(_jmxremote_ssl_config_file);
796 PUT_OPTION(_jmxremote_autodiscovery);
797 PUT_OPTION(_jdp_port);
798 PUT_OPTION(_jdp_address);
799 PUT_OPTION(_jdp_source_addr);
800 PUT_OPTION(_jdp_ttl);
801 PUT_OPTION(_jdp_pause);
802 PUT_OPTION(_jdp_name);
803
804 #undef PUT_OPTION
805
806 Handle str = java_lang_String::create_from_str(options.as_string(), CHECK);
807 JavaCalls::call_static(&result, k, vmSymbols::startRemoteAgent_name(), vmSymbols::string_void_signature(), str, CHECK);
808 }
809
810 JMXStartLocalDCmd::JMXStartLocalDCmd(outputStream *output, bool heap_allocated) :
811 DCmd(output, heap_allocated) {
812 // do nothing
813 }
814
815 void JMXStartLocalDCmd::execute(DCmdSource source, TRAPS) {
816 ResourceMark rm(THREAD);
817 HandleMark hm(THREAD);
818
819 // Load and initialize the jdk.internal.agent.Agent class
820 // invoke startLocalManagementAgent(void) method to start
821 // the local management server
822 // throw java.lang.NoSuchMethodError if method doesn't exist
823
824 Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
825 Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
826
827 JavaValue result(T_VOID);
828 JavaCalls::call_static(&result, k, vmSymbols::startLocalAgent_name(), vmSymbols::void_method_signature(), CHECK);
829 }
830
831 void JMXStopRemoteDCmd::execute(DCmdSource source, TRAPS) {
832 ResourceMark rm(THREAD);
833 HandleMark hm(THREAD);
834
835 // Load and initialize the jdk.internal.agent.Agent class
836 // invoke stopRemoteManagementAgent method to stop the
837 // management server
838 // throw java.lang.NoSuchMethodError if method doesn't exist
839
840 Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
841 Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
842
843 JavaValue result(T_VOID);
844 JavaCalls::call_static(&result, k, vmSymbols::stopRemoteAgent_name(), vmSymbols::void_method_signature(), CHECK);
845 }
846
847 JMXStatusDCmd::JMXStatusDCmd(outputStream *output, bool heap_allocated) :
848 DCmd(output, heap_allocated) {
849 // do nothing
850 }
851
852 void JMXStatusDCmd::execute(DCmdSource source, TRAPS) {
853 ResourceMark rm(THREAD);
854 HandleMark hm(THREAD);
855
856 // Load and initialize the jdk.internal.agent.Agent class
857 // invoke getManagementAgentStatus() method to generate the status info
858 // throw java.lang.NoSuchMethodError if method doesn't exist
859
860 Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
861 Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
862
863 JavaValue result(T_OBJECT);
864 JavaCalls::call_static(&result, k, vmSymbols::getAgentStatus_name(), vmSymbols::void_string_signature(), CHECK);
865
866 jvalue* jv = (jvalue*) result.get_value_addr();
867 oop str = (oop) jv->l;
868 if (str != NULL) {
869 char* out = java_lang_String::as_utf8_string(str);
870 if (out) {
871 output()->print_cr("%s", out);
872 return;
873 }
874 }
875 output()->print_cr("Error obtaining management agent status");
876 }
877
878 VMDynamicLibrariesDCmd::VMDynamicLibrariesDCmd(outputStream *output, bool heap_allocated) :
879 DCmd(output, heap_allocated) {
880 // do nothing
881 }
882
883 void VMDynamicLibrariesDCmd::execute(DCmdSource source, TRAPS) {
884 os::print_dll_info(output());
|