< prev index next >

src/share/vm/services/diagnosticCommand.cpp

Print this page




 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());


< prev index next >