JDK工具jstatd用法详解(转)
jstatd,即虛擬機(jī)的jstat守護(hù)進(jìn)程,主要用于監(jiān)控JVM的創(chuàng)建與終止,并提供一個接口允許遠(yuǎn)程監(jiān)控工具依附到在本地主機(jī)上運行的JVM。
用法摘要
jstatd [ options ] options描述
jstatd工具是一個RMI服務(wù)器應(yīng)用程序,主要用于監(jiān)控HotSpot Java 虛擬機(jī)的創(chuàng)建與終止,并提供一個接口以允許遠(yuǎn)程監(jiān)控工具附加到本地主機(jī)上運行的JVM上。
jstatd服務(wù)器需要在本地主機(jī)上存在一個RMI注冊表。jstatd服務(wù)器將嘗試在默認(rèn)端口或-p port選項指定的端口附加到該RMI注冊表上。如果RMI注冊表不存在,jstatd應(yīng)用程序?qū)詣觿?chuàng)建一個,并綁定到-p port選項指定的端口上,如果省略了-p port選項,則綁定到默認(rèn)的RMI注冊表端口。你可以通過指定-nr選項來抑制內(nèi)部RMI注冊表的創(chuàng)建。
注意:此工具是不受支持的,并且無法確定在未來版本的JDK中是否可用。目前,此工具不適用于Windows 98和Windows ME平臺。選項
-nr 當(dāng)找不到現(xiàn)有的RMI注冊表時,不嘗試使用jstatd進(jìn)程創(chuàng)建一個內(nèi)部的RMI注冊表。 -p port 在指定的端口查找RMI注冊表。如果沒有找到,并且沒有指定-nr選項,則在該端口自行創(chuàng)建一個內(nèi)部的RMI注冊表。 -n rminame RMI注冊表中綁定的RMI遠(yuǎn)程對象的名稱。默認(rèn)的名稱為JStatRemoteHost。如果多個jstatd服務(wù)器在同一主機(jī)上運行,你可以通過指定該選項來讓每個服務(wù)器導(dǎo)出的RMI對象具有唯一的名稱。不管如何,這樣做需要將唯一的服務(wù)器名稱包含進(jìn)監(jiān)控客戶端的hostid和vmid字符串中。 -Joption 將選項參數(shù)傳遞給被javac調(diào)用的java啟動程序。例如,-J-Xms48m設(shè)置啟動內(nèi)存為48 MB。使用-J將選項參數(shù)傳遞給執(zhí)行Java應(yīng)用程序的底層虛擬機(jī),這是一種常見慣例。安全性
jstatd只能夠監(jiān)控具有適當(dāng)?shù)谋镜卦L問權(quán)限的JVM。因此,jstatd進(jìn)程必須以與目標(biāo)JVM相同的用戶憑證來運行。某些用戶憑據(jù),例如基于Unix系統(tǒng)的root用戶,有權(quán)限訪問系統(tǒng)中任何JVM導(dǎo)出的instrumentation。以此憑據(jù)運行的jstatd進(jìn)程可以監(jiān)控系統(tǒng)上的任何JVM,但會引入一些額外的安全隱患。
jstatd服務(wù)器不提供遠(yuǎn)程客戶端的任何授權(quán)許可。因此,通過那些jstatd進(jìn)程有權(quán)訪問網(wǎng)絡(luò)中任何用戶的所有JVM,運行jstatd進(jìn)程會暴露instrumentation出口。這種接觸可能不是你的當(dāng)前環(huán)境所想要的;在啟動jstatd進(jìn)程之前,尤其是和生產(chǎn)環(huán)境或者非安全的網(wǎng)絡(luò)中,你應(yīng)該考慮本地的安全策略。
如果沒有安裝其他的安全管理器,jstatd服務(wù)器會安裝一個RMISecurityPolicy的實例,因此需要指定一個安全策略文件。策略文件必須遵循該默認(rèn)策略實現(xiàn)的策略文件語法。
下列策略文件將允許jstatd服務(wù)器在沒有任何安全例外的情況下運行。該策略沒有授權(quán)所有權(quán)限給所有代碼庫那么自由,但卻比授予最小的權(quán)限來運行jstatd服務(wù)器更自由。
grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission; };為了使用此策略,請復(fù)制上述文本到一個名叫jstatd.all.policy的文件中,并使用如下命令運行jstatd服務(wù)器:
jstatd -J-Djava.security.policy=jstatd.all.policy對于具有更嚴(yán)格的安全實踐的網(wǎng)絡(luò)場所而言,可能使用一個自定義的策略文件來顯示對特定的可信主機(jī)或網(wǎng)絡(luò)的訪問,盡管這種技術(shù)容易受到IP地址欺詐攻擊。?如果你的安全問題無法使用一個定制的策略文件來處理,那么最安全的操作是不運行jstatd服務(wù)器,而是在本地使用jstat和jps工具。
遠(yuǎn)程接口
jstatd進(jìn)程輸出的接口是私有的,并會產(chǎn)生變化。不鼓勵用戶和開發(fā)者往此接口寫入數(shù)據(jù)。
示例
這里有一些啟動jstatd的示例。注意,jstatd腳本會自動在后臺啟動服務(wù)器。
1、使用內(nèi)部的RMI注冊表
本示例演示啟動jstatd,并使用內(nèi)部RMI注冊表。本示例假定沒有其它服務(wù)器綁定到默認(rèn)的RMI注冊表端口(端口號 1099)。
jstatd -J-Djava.security.policy=all.policy2、使用外部的RMI注冊表
本示例演示啟動jstatd,并使用外部RMI注冊表。
rmiregistry & jstatd -J-Djava.security.policy=all.policy本示例演示啟動jstatd,并使用端口2020上的外部RMI注冊表。
rmiregistry 2020 & jstatd -J-Djava.security.policy=all.policy -p 2020本示例演示啟動jstatd,并使用端口2020上的外部RMI注冊表,綁定的RMI遠(yuǎn)程對象名稱為AlternateJstatdServerName。
rmiregistry 2020 & jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName3、抑制進(jìn)程中的RMI注冊表的創(chuàng)建
本示例演示啟動jstatd,而且即使找不到現(xiàn)有的RMI注冊表,也不會創(chuàng)建一個新的RMI注冊表。本示例假定已經(jīng)有一個RMI注冊表在運行中。如果沒有,則發(fā)出適當(dāng)?shù)腻e誤信息。
jstatd -J-Djava.security.policy=all.policy -nr4、啟動RMI日志能力
本示例演示啟動jstatd,并啟用RMI日志功能。該技術(shù)對于故障排除的援助或者監(jiān)控服務(wù)器活動非常有用。
jstatd -J-Djava.security.policy=all.policy -J-Djava.rmi.server.logCalls=true5、遠(yuǎn)程連接實例
在JDK的bin目錄下新建jstatd.all.policy文件(其實目錄可以自己選擇)鍵入一下代碼用于啟動JSTATD:
vim jstatd.all.policy #內(nèi)容如下 grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission; };啟動
jstatd -J-Djava.security.policy=/opt/jstatd.all.policy(文件的目錄/jstatd.all.policy) -p 123(端口號,用于Java VisualVM遠(yuǎn)程鏈接)使用VisualVM進(jìn)行遠(yuǎn)程連接,在JAVA_HOME/bin下找到j(luò)visualvm,啟動輸入遠(yuǎn)程IP+端口號即可。
?
參考:
http://www.softown.cn/post/188.html(以上內(nèi)容轉(zhuǎn)自此篇文章)
http://www.cnblogs.com/guoximing/articles/6110319.html
總結(jié)
以上是生活随笔為你收集整理的JDK工具jstatd用法详解(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原创:当年苏联为啥非要吞并波罗的海三国?
- 下一篇: Teradata首席分析官Bill Fr