簡體   English   中英

如何從命令行查詢正在運行的Java應用程序?

[英]How to query running java application from command line?

我已經在服務器上運行了一個正在運行的Java Scala Web應用程序。 如何制作cli界面來訪問/查詢正在運行的應用程序? 最少,我只需要調用正在運行的應用程序的方法,並從命令行中檢索返回的字符串即可。 我該怎么做?

注意: Apache Thrift似乎與我的問題有關,但感覺像是過分殺了。 我只想編寫一個bash腳本或一個小型Java程序,即可“鈎住”已運行的應用程序。

您的程序可以使用Attach API查找正在運行的JVM並連接到它。

http://docs.oracle.com/javase/7/docs/jdk/api/attach/spec/

然后,您可以告訴它將代理加載到JVM中。 請參閱java.lang.instrument軟件包說明中的 “ VM啟動后啟動代理”一章,以了解如何實現這種代理。

該代理可以在目標JVM中調用所需的方法。 請注意,在管理另一個應用程序時,您可能已經想要執行許多操作的JMX代理已經存在。 值得研究。

使用JMX

考慮到您的要求,最簡單的解決方案最有可能使用JMX 這正是它的用途,因為它是Java Management eXtensions API。

你可以找到一個很好的詳細教程線索Java教程 這比較簡單。 您的Java程序將偵聽來自JMX客戶端的連接,並允許您查詢自己的管理Bean (MBean)。

然后,管理員將能夠使用JMX兼容客戶端(例如jconsole )或自定義客戶端。 有關自定義JMX客戶端示例,請參見此處。

另一個不錯的(雖然有些古老)的教程是《 MBeans入門》


如果您想要截取特定函數的返回值,而不是創建自己的擴展點進行監視和管理,那么您更有可能想要使用調試器。

另外,您可能對以下SO問題感興趣:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM