2011-06-09 177 views
9

我在Ubuntu 10.10上運行Tomcat 6.0.31並使用tge Sun JDK(java-6-sun)。雖然tomcat正在運行,但在運行jps(Java虛擬機進程狀態工具)時,其進程並未顯示出來。我看到的唯一輸出是jps流程本身的pid。爲什麼Tomcat進程不顯示?jps沒有顯示Tomcat進程

+1

您是否曾嘗試以根用戶身份運行jps?也許這是一個權限問題? – Pace 2011-06-09 04:07:01

+0

對於較新的JVM,@Pace的評論指向了正確的答案:'jps -l'顯示了不同於'sudo jps -l'的進程列表。當它以root身份運行時,我必須使用'sudo'來查看Tomcat。 – Lambart 2018-01-04 01:03:04

回答

14

您可能正在運行到Bug 7009828

在Java 6更新23和Java 6更新24,Java的決定在什麼地方是需要,對於jpsjconsolejvisulavm在本地檢測到某些文件時考慮java.io.tmpdir財產運行JVM。這意味着每個有此係統屬性定義爲默認值(/tmp)以外的JVM實例對於這些工具都是不可見的。

Tomcat安裝特別默認將此屬性設置爲其安裝temp文件夾。

所以:要麼升級到Java 6更新25或更高版本(其中的bug是固定的)或-J-Djava.io.tmpdir=/path-to-tomcat-installation/temp開始jps

2

難道這是由於/tmp/hsperfdata_$USER目錄被您的系統上運行的cron作業刪除?有關更多信息,請參閱http://www.semicomplete.com/blog/geekery/jps-shows-nothing-useful.html

+0

對我來說,這似乎也是個問題。長時間運行的進程從'jps'輸出中消失,cron作業似乎是罪魁禍首。爲什麼Java設計人員在決定將這些進程文件放在'/ tmp'目錄時不會考慮這個問題? – ADTC 2014-02-20 06:44:43

0

檢查您的vm參數是否存在-XX:-UsePerfData

如果是這樣,將其刪除,並重新啓動JVM

0

檢查/ tmp目錄的所有權,像這樣/ hsperfdata_ *目錄:

ls -ld /tmp/hsperfdata_* 

每個目錄將擁有該Java中的用戶擁有處理。如果您感興趣的流程不屬於您,那麼數據將無法訪問。但是,如果以root身份運行jstatd,則它將能夠訪問所有數據。

sudo jstatd <rest of options...>