通過(guò)windows系統(tǒng)中的VisualVM工具,監(jiān)控Linux系統(tǒng)的測(cè)試環(huán)境或uat環(huán)境或生成環(huán)境,來(lái)監(jiān)控JVM內(nèi)存。
VisualVm提供在Java虛擬機(jī)(Java Virutal Machine,JVM)上運(yùn)行的java應(yīng)用程序。
只有按照了jdk,就可以在bin目錄下,找到啟動(dòng)程序。
以下是具體步驟:
一、再windows系統(tǒng)中,啟動(dòng)VisualVM
-
在windows系統(tǒng)中java安裝目錄中
jdk/bin/
目錄下的jvisualvm.exe
啟動(dòng)程序。雙擊啟動(dòng)。 -
下載插件
依次點(diǎn)擊:工具-> 插件
二、再Linux系統(tǒng)中,配置遠(yuǎn)程授權(quán)
要監(jiān)控Linux服務(wù)器,需要在該服務(wù)器上運(yùn)行jstatd
守護(hù)進(jìn)程。
2.1 配置
jstatd
命令也是在jdk/bin/
目錄下。
執(zhí)行這個(gè)命令之前,需要進(jìn)行安全策略授權(quán)。在jdk/bin
目錄下,創(chuàng)建名稱為jstatd.all.policy
的文件,內(nèi)容如下:
grant codebase "file:${java.home}/../lib/tools.jar" { ? permission java.security.AllPermission; };
2.2 啟動(dòng)
配置完后,在jdk/bin
目錄下執(zhí)行jstatd
命令,命令為:
# jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=ip (hostname 為你的 IP) # & 是后臺(tái)運(yùn)行 ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=172.16.120.12 &
如果啟動(dòng)報(bào)錯(cuò),錯(cuò)誤信息如下:
/usr/local/jdk1.8.0_321/bin/jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=172.16.120.12 Could not create remote object access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) at java.security.AccessController.checkPermission(AccessController.java:886) at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) at java.lang.System.setProperty(System.java:792) at sun.tools.jstatd.Jstatd.main(Jstatd.java:139) ?
解決辦法:修改/usr/local/jdk1.8.0_321/jre/lib/security/java.policy
文件,并在最后增加如下內(nèi)容:
//添加下面內(nèi)容 permission java.security.AllPermission;
添加完,整體文件如下:
// Standard extensions get all permissions by default ? grant codeBase "file:${{java.ext.dirs}}/*" { ? ? ? permission java.security.AllPermission; }; ? // default permissions granted to all domains ? grant { ? ? ? // Allows any thread to stop itself using the java.lang.Thread.stop() ? ? ? // method that takes no argument. ? ? ? // Note that this permission is granted by default only to remain ? ? ? // backwards compatible. ? ? ? // It is strongly recommended that you either remove this permission ? ? ? // from this policy file or further restrict it to code sources ? ? ? // that you specify, because Thread.stop() is potentially unsafe. ? ? ? // See the API specification of java.lang.Thread.stop() for more ? ? ? // information. ? ? ? permission java.lang.RuntimePermission "stopThread"; ? ? ? ? // allows anyone to listen on dynamic ports ? ? ? permission java.net.SocketPermission "localhost:0", "listen"; ? ? ? ? // "standard" properies that can be read by anyone ? ? ? ? permission java.util.PropertyPermission "java.version", "read"; ? ? ? permission java.util.PropertyPermission "java.vendor", "read"; ? ? ? permission java.util.PropertyPermission "java.vendor.url", "read"; ? ? ? permission java.util.PropertyPermission "java.class.version", "read"; ? ? ? permission java.util.PropertyPermission "os.name", "read"; ? ? ? permission java.util.PropertyPermission "os.version", "read"; ? ? ? permission java.util.PropertyPermission "os.arch", "read"; ? ? ? permission java.util.PropertyPermission "file.separator", "read"; ? ? ? permission java.util.PropertyPermission "path.separator", "read"; ? ? ? permission java.util.PropertyPermission "line.separator", "read"; ? ? ? ? permission java.util.PropertyPermission "java.specification.version", "read"; ? ? ? permission java.util.PropertyPermission "java.specification.vendor", "read"; ? ? ? permission java.util.PropertyPermission "java.specification.name", "read"; ? ? ? ? permission java.util.PropertyPermission "java.vm.specification.version", "read"; ? ? ? permission java.util.PropertyPermission "java.vm.specification.vendor", "read"; ? ? ? permission java.util.PropertyPermission "java.vm.specification.name", "read"; ? ? ? permission java.util.PropertyPermission "java.vm.version", "read"; ? ? ? permission java.util.PropertyPermission "java.vm.vendor", "read"; ? ? ? permission java.util.PropertyPermission "java.vm.name", "read"; ? ? ? //添加下面內(nèi)容 ? ? ? permission java.security.AllPermission; };
再次運(yùn)行jstatd
命令就不會(huì)報(bào)錯(cuò)了,命令如下:
./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=172.16.120.12 &
三、遠(yuǎn)程連接
在windows系統(tǒng)中java安裝目錄中jdk/bin/
目錄下的jvisualvm.exe
啟動(dòng)程序。雙擊啟動(dòng)。
點(diǎn)擊確認(rèn),就連接成功了。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-789343.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-789343.html
到了這里,關(guān)于JVM調(diào)優(yōu)工具-VisualVM 遠(yuǎn)程連接服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!