2011-11-16 20 views
0

有什么方法可以找出java应用程序在JVM内部使用的所有java选项(例如通过命令行传递的选项)?查找Java应用程序使用的java选项

我想在应用程序从外部运行时即时找到它。

+3

是[这](http://stackoverflow.com/questions/1490869/how-to-get-vm-arguments-from-inside-of-java-application)你在找什么? – NullUserException

回答

0

您可以使用JMX:

final JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(connectorAddress)); 
final MBeanServerConnection mBeanServerConnection = connector.getMBeanServerConnection(); 
final ObjectName commandLine = new ObjectName("java.lang:type=Runtime"); 
final List<Attribute> arguments = mBeanServerConnection.getAttributes(commandLine, new String[] {"InputArguments"}).asList(); 
String[] inputArguments = (String[]) arguments.get(0).getValue(); 
System.out.println(Arrays.asList(inputArguments)); 
connector.close(); 

要获取JMX连接时,你可能会发现我的回答 “JMX client accessible locally only” 很有帮助。

1
Map<String, String> env = System.getenv(); 
for (String envName : env.keySet()) { 
    System.out.format("%s=%s%n", envName, env.get(envName)); 
} 
+0

感谢您的答案,但我想知道它是否可能从应用程序之外。 –

-1

我相信Java不支持方法参数的“INTERCEPTING”,方法参数不会在JVM中被记录或拦截。

但是,您可以在此线程的其他答案中使用System.env示例轻松打印发送到正在运行的类的参数。

但是,如果你控制了实际应用的源代码,你可以在这里遵循的方向:How do I intercept a method invocation with standard java features (no AspectJ etc)?

这将允许您登录并拦截ARGS被发送到的主要方法。

+0

这不是问题所在,海报需要JVM参数,而不是任何特定方法的参数。 – jli

0

使用JMX。它允许从应用程序的内部以及外部获取选项,属性等。

jmx