Jstatd命令(Java Statistics Monitoring Daemon)
2019獨角獸企業重金招聘Python工程師標準>>>
JDK內置工具使用
一、javah命令(C?Header?and?Stub?File?Generator)
二、jps命令(Java?Virtual?Machine?Process?Status?Tool)
三、jstack命令(Java?Stack?Trace)
四、jstat命令(Java?Virtual?Machine?Statistics?Monitoring?Tool)
五、jmap命令(Java?Memory?Map)
六、jinfo命令(Java?Configuration?Info)
七、jconsole命令(Java?Monitoring?and?Management?Console)
八、jvisualvm命令(Java?Virtual?Machine?Monitoring,?Troubleshooting,?and?Profiling?Tool)
九、jhat命令(Java?Heap?Analyse?Tool)
十、Jdb命令(The?Java?Debugger)
十一、Jstatd命令(Java Statistics Monitoring Daemon)
?
1、介紹
??? jstatd是一個基于RMI(Remove?Method?Invocation)的服務程序,它用于監控基于HotSpot的JVM中資源的創建及銷毀,并且提供了一個遠程接口允許遠程的監控工具連接到本地的JVM執行命令。
??? jstatd是基于RMI的,所以在運行jstatd的服務器上必須存在RMI注冊中心,如果沒有通過選項"-p?port"指定要連接的端口,jstatd會嘗試連接RMI注冊中心的默認端口。后面會談到如何連接到一個默認的RMI內部注冊中心,如何禁止默認的RMI內部注冊中心的創建,以及如何啟動一個外部注冊中心。
?
2、參數選項
??? jstatd命令支持如下的選項:
??? -nr?如果RMI注冊中心沒有找到,不會創建一個內部的RMI注冊中心。
??? -p?port?RMI注冊中心的端口號,默認為1099。
??? -n?rminame?默認為JStatRemoteHost;如果同一臺主機上同時運行了多個jstatd服務,rminame可以用于唯一確定一個jstatd服務;這里需要注意一下,如果開啟了這個選項,那么監控客戶端遠程連接時,必須同時指定hostid及vmid,才可以唯一確定要連接的服務,這個可以參看jps章節中列出遠程服務器上Java進程的示例。
??? -J?用于傳遞jvm選項到由javac調用的java加載器中,例如,“-J-Xms48m”將把啟動內存設置為48M,使用-J選項可以非常方便的向基于Java的開發的底層虛擬機應用程序傳遞參數。
?
3、安全性
??? jstatd服務只能監視具有適當的本地訪問權限的JVM,因此jstatd進程與被監控的JVM必須運行在相同的用戶權限中。但是有一些特殊的用戶權限,如基于UNIX(TM)為系統的root用戶,它有權限訪問系統中所有JVM的資源,如果jstatd進程運行在這種權限中,那么它可以監視系統中的所有JVM,但是這也帶來了額外的安全問題。
??? jstatd服務不會對客戶端進行任何的驗證,因此運行了jstatd服務的JVMs,網絡上的任何用戶的都具有訪問權限,這種暴露不是我們所希望的,因此在啟動jstatd之前本地安全策略必須要加以考慮,特別是在生產環境中或者是在不安全的網絡環境中。
??? 如果沒有其他安全管理器被安裝,jstatd服務將會安裝一個RMISecurityPolicy的實例,因此需要在一個安全策略文件中指定,該策略文件必須符合的默認策略實施的策略文件語法。
??? 下面的這個示例策略將允許jstatd服務具有JVM全部的訪問權限:????
[plain] view plain copy
??? 注:此處策略中的java.home,和JAVA_HOME不是一個概念,童鞋們不要搞錯了,此處的java.home指的是JRE的路徑,這個是Java的系統屬性,不需要手工指定,通常是這個jdk下面的jre路徑,即可以認為${java.home}和${JAVA_HOME}/jre是等價,如果想查看這個變量的值,可以任意找一個運行著的Java應用,找到它的PID,然后通過如下jinfo命令查看就可以查看到java.home的值:
[plain] view plain copy
?
??? 也可以在Java代碼中通過如下方式獲取到:
[plain] view plain copy
??? 將上面的策略內容拷貝一個文件中,文件名可以隨意取,為了形象我們將文件名命名為jstatd.all.policy,文件存放的路徑也可以隨意,只有你當前登陸的用戶具有訪問權限就可以,然后執行以下命令就可以啟動jstatd服務:
[plain] view plain copy
??? 如果是在具有安全限制的環境中,jstatd的策略安全一定要設置得當,并且只允許受信任的服務器或者網絡訪問,以免遭受網絡攻擊,如果存在安全隱患,最好不要啟動jstatd服務,就在本地使用jstat及jps等工具對JVM進行監控了。
?
4、示例
4.1、使用內部RMI注冊中心
??? 下面這個示例演示了通過內部RMI注冊中心啟動jstatd,這個示例假設沒有其它的服務綁定到默認的RMI注冊中心端口(默認端口是1099)。
[plain] view plain copy
??? 注:如果基于默認端口1099的RMI注冊中心原來沒有被啟動過,那么上面運行的命令首先會啟動端口為1099的RMI注冊中心,然后再啟動jstatd服務,此時即使jstatd停止了,RMI注冊中心也不會停止;如果是再次執行上面的命令,就不會再次啟動RMI注冊中心,jstatd會直接注冊到注冊中心。
?
4.2、使用外部的RMI注冊中心
??? 這個示例演示了使用一個外部的RMI注冊中心來啟動jstatd,如果默認的內部注冊中心已經被啟動了,下面的這個示例就會拋出“端口1099已經被占用”的異常,因為它嘗試在1099端口啟動外部RMI注冊中心:
[plain] view plain copy
??? 這個示例演示了使用一個外部的RMI注冊中心來啟動jstatd,此注冊中心的端口為2020:
[plain] view plain copy
??? 這個示例演示了使用一個外部的RMI注冊中心來啟動jstatd,此注冊中心的端口為2020,并且綁定到RMI注冊中心的名為AlternateJstatdServerName:
[plain] view plain copy
??? 注:這個端口為2020的RMI注冊中心,我們會在jps章節中使用到。
?
4.3、禁止內部RMI注冊中心的創建
??? 這個示例演示了jstatd在啟動的時候,如果沒有找到默認的RMI注冊中心,也不會創建默認的注冊中心。這個示例中如果沒有RMI注冊中心在運行,此示例就會報錯,如果存在就會正常運行:???
[plain] view plain copy
?
?
4.4、開啟RMI日記記錄
??? 這個示例演示的是jstatd運行在開啟了日志記錄功能的RMI注冊中,這個對于問題查找或監控服務狀態非常有用:
[plain] view plain copy
轉載于:https://my.oschina.net/zorigin/blog/758412
總結
以上是生活随笔為你收集整理的Jstatd命令(Java Statistics Monitoring Daemon)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Adobe Photoshop CS6
- 下一篇: servlet上传下载(任何格式的都可以