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