jvisualVM的试用本地及远程xp及linux的的监听

来源:互联网 发布:优易数据网站 编辑:程序博客网 时间:2024/06/09 21:38

    最近在做JDK中的jvisualVM工具监听jvm的任务。期间遇到一些问题,在此总结一下。

    目录,jvisualVM是JDK 1.6 及以上版本的一款java程序及jvm的监测工具。无需安装,直接运行。

                windows系统下在:D:\Program Files\Java\jdk1.6.0_10\bin目录内;

                linux系统下在:/usr/java/jdk1.7.0_05/bin目录内;

    运行,jvisualVM是可视化工具,纯命令行liunx系统应该不好运行。

                windows系统下启动jvisualVM可能会报错:“无法检测到本地java应用程序”

                               解决方案:1.对jvisualVM.exe创建快捷方式,更改属性目标:添加“-XX:+PerfBypassFileSystemCheck”;

                                                    2.启动java程序的时候添加一个参数即可:-XX:+PerfBypassFileSystemCheck

                                                    3.我使用的办法是:使用windows自带的命令行convert C: /fs:ntfs将c盘原来的FAT32格式转成ntfs格式。

                                       解释:在win32系统上,每个java进程启动之后都在%TMP%\hsperfdata_user(user为当前登录用户名)目录下建立的一个以该java进程pid为文件名

                                                   的文件, 用以记录该java进程的一些信息。而jconsole和jps正是利用这些文件来获取当前系统的java进程信息的。根据:

                                       http://java.sun.com/j2se/1.5.0/docs/guide/management/faq.html#win1的解释,如果该目录位于FAT文件系统之下当前用户 对%TMP%\hsperfdata_user目录的访问权限不足,无法创建和写入该文件,从而报以上错误。

                 完成jvisualVM的启动就可以自动监听本地的java进程了,

                 windows系统监听远程的windows系统:

                                1.远程前要在远程机启动jstatd工具监听远程机上的一个端口(默认1099)命令行启动:

                                                    jstatd -J-Djava.security.policy=all.policy #默认端口1099
                                                    jstatd -J-Djava.security.policy=all.policy -p 9998  #指定端口9998

                                                    启动时可能会报错:

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:323) at java.security.AccessController.checkPermission(AccessController.java:546) at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) at java.lang.System.setProperty(System.java:727) at sun.tools.jstatd.Jstatd.main(Jstatd.java:122) 



                                                     这是因为没有给jstatd制定安全策略

                                                                             解决方案:1.进入D:\Program Files\Java\jdk1.6.0_10\jre\lib\security目录下的java.policy

                                                                                                  2.打开java.policy文件,在文档的倒数第二行添加:“permission java.security.AllPermission;”;

                                 2.启动后命令行窗口不要关掉,关掉后相应的进程也会关掉。

                  windows系统远程监听linux系统:

                                 1.远程前要在远程机启动jstatd工具监听远程机的一个端口(默认1099)terminal启动:

                                                      jstatd -J-Djava.security.policy=all.policy

                                                      启动时也有可能会报错误:(如上)

                                                                               解决方案:1.创建新的文件java.all.policy,并写入如下代码:

grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission;};
                                 2.使用下面代码启动:
                                
jstatd -J-Djava.security.policy=/etc/jstatd.all.policy (默认端口号:1099)jstatd -J-Djava.security.policy=/etc/jstatd.all.policy -p 8000 (修改端口号:8000)jstatd -J-Djava.security.policy=/etc/jstatd.all.policy -p 8000 -J-Djava.rmi.server.hostname=183.232.17.73:146(修改端口号:8000;返回ip)
                                 3.启动前执行:hostname -i 查看主机返回的端口号。如果是正常的端口号则正常,如果是返回的127.0.0.1则需要修改。

                                                       1.vi /etc/hosts 编辑localhost字样的前面参数127.0.0.1修改为我们需要访问的真实地址。保存退出。

                                                       


原创粉丝点击