JvisualVM是一款很好用的java程序检测工具。今天在公司用的时候,总是提示"无法检测到本地java应用程序",起初以为是jdk的版本不对,我的jvisualvm是在jdk7里面的,java程序使用的是jdk6,改了之后还是出现这个提示。
网上搜索了一下,找到了很多办法,找到了一个比较简单的办法。
在启动java程序的时候添加一个参数即可:
1 |
-XX:+PerfBypassFileSystemCheck |
找了点资料,正好在OSC看到一位网友@钛元素的回答:
在 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 文件系统下,或者位于 NTFS 文件系统下,但当前用户对%TMP%\hsperfdata_user目录的访问权限不足,无法创建和写入该文件,jconsole 和 jps 就抓瞎了。