文章目录
- 基础环境
- 1 找不到jps、jvisualvm等命令问题
- 1.1 原因
- 1.2 解决方案
- 2 jdk工具无法正常使用问题
- 2.1 原因
- 2.2 `%TMP%\hsperfdata_username`文件夹
- 2.3 解决方案
基础环境
jdk-8u261-windows-x64
,一直下一步,安装到d盘下
1 找不到jps、jvisualvm等命令问题
运行了一个java程序,想使用jps命令看一下进程id,发现找不到jps命令
1.1 原因
找不到jps命令是因为没有添加环境变量,找到系统变量中的Path
,发现自动配置了一个C:\Program Files (x86)\Common Files\Oracle\Java\javapath
这里面只有很基础的几个软件,jps、javadoc、jvisualvm
等都不在这里,于是我们需要配置正确的环境变量
1.2 解决方案
删除这一条:C:\Program Files (x86)\Common Files\Oracle\Java\javapath
;
添加一条:D:\Program Files\Java\jdk1.8.0_261\bin
;
问题解决!
2 jdk工具无法正常使用问题
使用jps
命令不显示java进程id问题,同时jvisualvm
也提示无法检测到本地java应用程序
2.1 原因
其实官方已经给我们答案了:
Local Applications Cannot Be Detected (Error Dialog On Startup)
Description: An error dialog saying that local applications cannot be detected is shown immediately after VisualVM startup.
Resolution: This can happen on Windows systems, it's caused by misconfigured jvmstat technology used to detect the running applications. There are two possible causes:
Insufficient permissions for %TMP%\hsperfdata_username folder - make sure you're able to create a file in the directory and eventually update the permissions for full folder access. Alternatively you can just re-create the folder which should automatically set the correct access rights. See see this forums.sun.com thread for more details.
Having %TMP%\hsperfdata_username folder on a FAT disk - by default jvmstat doesn't work on FAT disks due to security restrictions. You can bypass the security check by setting the -XX:+PerfBypassFileSystemCheck flag for both VisualVM and the monitored application. See the JDK bug #5042659 for more details.
大概原因是以下两点:
%TMP%\hsperfdata_username
文件夹权限不足、文件夹不存在、文件夹存在但不可用。- 文件夹所在的磁盘不是
NTFS
格式的
2.2 %TMP%\hsperfdata_username
文件夹
在 Windows 操作系统中,%TMP%\hsperfdata_username
是用于存储 Java 进程的性能数据
的目录。其中,%TMP%
是系统环境变量,指向当前用户的临时文件夹,而 username
则是当前登录用户的用户名。
Java 进程在运行时,会产生一些性能数据,例如 CPU 使用率、内存使用情况、线程数量等等。这些数据可以帮助开发人员进行性能优化和调试。在 Windows 操作系统中,Java 进程会将这些性能数据保存到 %TMP%\hsperfdata_username
目录中。
具体来说,每个 Java 进程都会在 %TMP%\hsperfdata_username
目录中创建一个以进程 ID(PID
)命名的文件夹,例如 1234。在该文件夹中,会保存当前 Java 进程的性能数据文件,文件名格式为 hsperfdata_pid
,例如 hsperfdata_1234
。
这些性能数据文件可以通过 Java Management Extensions(JMX)
API 或其他性能分析工具进行访问和分析。但需要注意的是,由于这些性能数据文件包含敏感信息,如进程内存布局等,因此只有特定的用户才能访问这些文件。在 Windows 操作系统中,只有具有 Performance Log Users 或 Administrators 权限的用户才能访问 %TMP%\hsperfdata_username
目录中的文件。
如何查询出%TMP%\hsperfdata_username
所在的文件夹,使用如下cmd命令查询:
echo %TMP%
查询出自己的用户名
echo %username%
2.3 解决方案
首先排查文件夹所在磁盘格式,如果不是NTFS
格式,则格式化为NTFS
格式即可;
其次,查看%TMP%\hsperfdata_username
文件夹是否有限制,如果有限制,删除即可,下次启动java进程时会自动创建该目录;