標籤:pos 注意 rem 樣本 soft 參考 有用 生產環境 ons
jstatd,即虛擬機器的jstat守護進程,主要用於監控JVM的建立與終止,並提供一個介面允許遠程監控工具依附到在本地主機上啟動並執行JVM。
用法摘要
jstatd [ options ]
-
options
-
命令列選項。這些選項可以是任意順序。如果存在多餘的或者自相矛盾的選項,則優先考慮最後的選項。
描述
jstatd工具是一個RMI伺服器應用程式,主要用於監控HotSpot JAVA 虛擬機器的建立與終止,並提供一個介面以允許遠程監控工具附加到本地主機上啟動並執行JVM上。
jstatd伺服器需要在本地主機上存在一個RMI註冊表。jstatd伺服器將嘗試在預設連接埠或-p port選項指定的連接埠附加到該RMI註冊表上。如果RMI註冊表不存在,jstatd應用程式將會自動建立一個,並綁定到-p port選項指定的連接埠上,如果省略了-p port選項,則綁定到預設的RMI註冊表連接埠。你可以通過指定-nr選項來抑制內部RMI註冊表的建立。
注意:此工具是不受支援的,並且無法確定在未來版本的JDK中是否可用。目前,此工具不適用於Windows 98和Windows ME平台。
選項
-nr當找不到現有的RMI註冊表時,不嘗試使用jstatd進程建立一個內部的RMI註冊表。-p port在指定的連接埠尋找RMI註冊表。如果沒有找到,並且沒有指定-nr選項,則在該連接埠自行建立一個內部的RMI註冊表。-n rminameRMI註冊表中綁定的RMI遠程對象的名稱。預設的名稱為JStatRemoteHost。如果多個jstatd伺服器在同一主機上運行,你可以通過指定該選項來讓每個伺服器匯出的RMI對象具有唯一的名稱。不管如何,這樣做需要將唯一的伺服器名稱包含進監控用戶端的hostid和vmid字串中。-Joption將選項參數傳遞給被javac調用的java啟動程式。例如,-J-Xms48m設定啟動記憶體為48 MB。使用-J將選項參數傳遞給執行Java應用程式的底層虛擬機器,這是一種常見慣例。
安全性
jstatd只能夠監控具有適當的本地存取權限的JVM。因此,jstatd進程必須以與目標JVM相同的使用者憑證來運行。某些使用者憑證,例如基於Unix系統的root使用者,有許可權訪問系統中任何JVM匯出的instrumentation。以此憑據啟動並執行jstatd進程可以監控系統上的任何JVM,但會引入一些額外的安全隱患。
jstatd伺服器不提供遠程用戶端的任何授權許可。因此,通過那些jstatd進程有權訪問網路中任何使用者的所有JVM,運行jstatd進程會暴露instrumentation出口。這種接觸可能不是你的當前環境所想要的;在啟動jstatd進程之前,尤其是和生產環境或者非安全的網路中,你應該考慮本地的安全性原則。
如果沒有安裝其他的安全管理器,jstatd伺服器會安裝一個RMISecurityPolicy的執行個體,因此需要指定一個安全性原則檔案。策略檔案必須遵循該預設策略實現的策略檔案文法。
下列策略檔案將允許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
對於具有更嚴格的安全實踐的網路場所而言,可能使用一個自訂的策略檔案來顯示對特定的可信主機或網路的訪問,儘管這種技術容易受到IP地址欺詐攻擊。 如果你的安全問題無法使用一個定製的策略檔案來處理,那麼最安全的操作是不運行jstatd伺服器,而是在本地使用jstat和jps工具。
遠程介面
jstatd進程輸出的介面是私人的,並會產生變化。不鼓勵使用者和開發人員往此介面寫入資料。
樣本
這裡有一些啟動jstatd的樣本。注意,jstatd指令碼會自動在後台啟動伺服器。
1、使用內部的RMI註冊表
本樣本示範啟動jstatd,並使用內部RMI註冊表。本樣本假定沒有其它伺服器綁定到預設的RMI註冊表連接埠(連接埠號碼 1099)。
jstatd -J-Djava.security.policy=all.policy
2、使用外部的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 AlternateJstatdServerName
3、抑制進程中的RMI註冊表的建立
本樣本示範啟動jstatd,而且即使找不到現有的RMI註冊表,也不會建立一個新的RMI註冊表。本樣本假定已經有一個RMI註冊表在運行中。如果沒有,則發出適當的錯誤資訊。
jstatd -J-Djava.security.policy=all.policy -nr
4、啟動RMI日誌能力
本樣本示範啟動jstatd,並啟用RMI日誌功能。該技術對於故障排除的援助或者監控伺服器活動非常有用。
jstatd -J-Djava.security.policy=all.policy -J-Djava.rmi.server.logCalls=true
5、遠端連線執行個體
在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用法詳解(轉)