posts - 28, comments - 37, trackbacks - 0, articles - 0

          jps無法顯示jvm進(jìn)程

          Posted on 2011-11-14 16:15 俞靈 閱讀(5955) 評(píng)論(0)  編輯  收藏

          本文轉(zhuǎn)自

          http://trinea.iteye.com/blog/1196400

           

          1、jps的作用

          jps類似linux的ps命令,不同的是ps是用來顯示進(jìn)程,而jps只顯示java進(jìn)程,準(zhǔn)確的說是當(dāng)前用戶已啟動(dòng)的部分java進(jìn)程信息,信息包括進(jìn)程號(hào)和簡(jiǎn)短的進(jìn)程command。

           

          2、某個(gè)java進(jìn)程已經(jīng)啟動(dòng),用jps卻顯示不了該進(jìn)程進(jìn)程號(hào)

          這個(gè)問題已經(jīng)碰到過兩次了,所以在這里總結(jié)下。

          現(xiàn)象:

          用ps -ef|grep java能看到啟動(dòng)的java進(jìn)程,但是用jps查看卻不存在該進(jìn)程的id。待會(huì)兒解釋過之后就能知道在該情況下,jconsole、jvisualvm可能無法監(jiān)控該進(jìn)程,其他java自帶工具也可能無法使用

           

          分析:

          java程序啟動(dòng)后,默認(rèn)(請(qǐng)注意是默認(rèn))會(huì)在/tmp/hsperfdata_userName目錄下以該進(jìn)程的id為文件名新建文件,并在該文件中存儲(chǔ)jvm運(yùn)行的相關(guān)信息,其中的userName為當(dāng)前的用戶名,/tmp/hsperfdata_userName目錄會(huì)存放該用戶所有已經(jīng)啟動(dòng)的java進(jìn)程信息。對(duì)于windows機(jī)器/tmp用Windows存放臨時(shí)文件目錄代替。

           

          而jps、jconsole、jvisualvm等工具的數(shù)據(jù)來源就是這個(gè)文件(/tmp/hsperfdata_userName/pid)。所以當(dāng)該文件不存在或是無法讀取時(shí)就會(huì)出現(xiàn)jps無法查看該進(jìn)程號(hào),jconsole無法監(jiān)控等問題

           

          原因:

          (1)、磁盤讀寫、目錄權(quán)限問題

          若該用戶沒有權(quán)限寫/tmp目錄或是磁盤已滿,則無法創(chuàng)建/tmp/hsperfdata_userName/pid文件?;蛟撐募呀?jīng)生成,但用戶沒有讀權(quán)限

           

          (2)、臨時(shí)文件丟失,被刪除或是定期清理

          對(duì)于linux機(jī)器,一般都會(huì)存在定時(shí)任務(wù)對(duì)臨時(shí)文件夾進(jìn)行清理,導(dǎo)致/tmp目錄被清空。這也是我第一次碰到該現(xiàn)象的原因

          這個(gè)導(dǎo)致的現(xiàn)象可能會(huì)是這樣,用jconsole監(jiān)控進(jìn)程,發(fā)現(xiàn)在某一時(shí)段后進(jìn)程仍然存在,但是卻沒有監(jiān)控信息了。

           

          (3)、java進(jìn)程信息文件存儲(chǔ)地址被設(shè)置,不在/tmp目錄下

          上面我們?cè)诮榻B時(shí)說默認(rèn)會(huì)在/tmp/hsperfdata_userName目錄保存進(jìn)程信息,但由于以上1、2所述原因,可能導(dǎo)致該文件無法生成或是丟失,所以java啟動(dòng)時(shí)提供了參數(shù),可以對(duì)這個(gè)文件的位置進(jìn)行設(shè)置,而jps、jconsole都只會(huì)從/tmp目錄讀取,而無法從設(shè)置后的目錄讀物信息,

                   這個(gè)問題只會(huì)在jdk 6u23和6u24上出現(xiàn),在6u23和6u24上,進(jìn)程信息會(huì)保存在-Djava.io.tmpdir下, 因此如果它被設(shè)置為非/tmp目錄則會(huì)導(dǎo)致 jps,jconsole等無法讀取的現(xiàn)象, 但在其他版本的jdk上,即使設(shè)置-Djava.io.tmpdir為非/tmp,  也會(huì)在/tmp/hsperfdata_userName下保存java進(jìn)程信息.因此可以說這是6u23和6u24的bug,

                   以下是jdk對(duì)該bug的描述地址:

          bug描述:
          http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7021676
          bug的修復(fù)描述:
          http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7009828
          bug修改代碼:
          http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/34d64ad817f4

           

           

          關(guān)于設(shè)置該文件位置的參數(shù)為-Djava.io.tmpdir


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 东兴市| 山东| 贞丰县| 宜春市| 松阳县| 宝应县| 临漳县| 连平县| 翁牛特旗| 宜城市| 历史| 军事| 庆安县| 盖州市| 凉城县| 保德县| 青海省| 彰化县| 玉溪市| 当阳市| 潢川县| 德钦县| 烟台市| 东宁县| 车险| 洛宁县| 建德市| 南郑县| 泰顺县| 旬阳县| 望奎县| 麻城市| 三河市| 高要市| 东城区| 迁安市| 海兴县| 灵石县| 长岭县| 济南市| 阳信县|