[英]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機器可以進行實驗)。
我可以想到兩種方式
/proc
文件系統 關於第一種替代方案,它是否使用本地JMX連接? 仍然,它必須去/proc
為pids。
jps
也列出了自己 關於第二種選擇,我覺得這可能是正確的,因為
-jar
或MainClass
/proc
了解PID 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.