簡體   English   中英

JPS工具如何獲取正在執行的主類或jar的名稱

[英]How does JPS tool get the name of the main class or jar it is executing

我想知道,JPS工具如何獲得它在jvm進程中執行的主類的名稱。 它是

jps -l
123   package.MainClass
456   /path/example.jar

我正在談論Linux(我對Windows不感興趣,而且我沒有Win機器可以進行實驗)。

我可以想到兩種方式

  1. 連接到有問題的JVM,然后告訴它
  2. 來自/proc文件系統

關於第一種替代方案,它是否使用本地JMX連接? 仍然,它必須去/proc為pids。

  1. 有PID,所以無論如何它必須要求操作系統
  2. jps也列出了自己

關於第二種選擇,我覺得這可能是正確的,因為

  1. 在命令行上,有-jarMainClass
  2. /proc了解PID
  3. jps開始做之前,它在/proc有自己的文件夾

但是 ,我在這里面臨的問題很少。 當java命令很長時(例如,存在極長的-classpath參數),有關命令行的信息不適合/proc為其保留的空間。 我的系統有4kB,而我在其他地方學到的,這是在OS代碼中硬連線(改變它需要內核編譯)。 但是,即使在這種情況下, jps仍然可以在某處獲得主要類。 怎么樣?

我需要找到更快的方法來獲取JVM進程而不是調用jps 當系統負載很大時(例如,當JVM的數量啟動時), jps卡住幾秒鍾(我已經看到它等待了大約30秒)。

jps掃描包含運行JVM的監視器和計數器的/tmp/hsperfdata_<username>/<pid>文件。 名為sun.rt.javaCommand的監視器包含您要查找的字符串。

要找出PerfData文件的格式,您必須查看JDK源代碼

暫無
暫無

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

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