如何从命令行查询正在运行的java应用程序?
我有一个运行在服务器上的Java Scala web应用程序。如何创建用于访问/查询正在运行的应用程序的cli界面?在mininum中,我只需要调用正在运行的应用程序的方法并检索它返回的字符串,所有这些都是从命令行执行的。我该怎么做如何从命令行查询正在运行的java应用程序?,java,command-line,command-line-interface,Java,Command Line,Command Line Interface,我有一个运行在服务器上的Java Scala web应用程序。如何创建用于访问/查询正在运行的应用程序的cli界面?在mininum中,我只需要调用正在运行的应用程序的方法并检索它返回的字符串,所有这些都是从命令行执行的。我该怎么做 注:似乎与我的问题有关,但感觉有点过头了。我只想编写一个bash脚本或一个小型java程序,它可以“钩住”已经运行的应用程序。您的程序可以使用attach API定位正在运行的JVM并连接到它 然后,您可以告诉它将代理加载到JVM中。看见 , “VM启动后启动代理
注:似乎与我的问题有关,但感觉有点过头了。我只想编写一个bash脚本或一个小型java程序,它可以“钩住”已经运行的应用程序。您的程序可以使用attach API定位正在运行的JVM并连接到它 然后,您可以告诉它将代理加载到JVM中。看见 , “VM启动后启动代理”一章,了解如何实现此类代理 此代理可以在目标JVM中调用所需的方法。请注意,在处理管理另一个应用程序时,您可能希望执行的许多操作已经存在JMX代理。值得研究。使用JMX 考虑到您的需求,最简单的解决方案很可能是使用。这正是它的目的,因为它是API 您可以在中找到非常详细的。它相对简单。您的Java程序将侦听来自JMX客户端的连接,并允许您查询自己的(MBean) 然后,管理员将能够使用与JMX兼容的客户端(例如
jconsole
)或自定义客户端。请看这里
另一个好的——尽管现在有点古老——教程是
如果您希望截取特定函数的返回值,而不是创建自己的用于监视和管理的扩展点,那么您更可能希望使用调试器 此外,您可能对以下问题感兴趣: