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