前一阵在公司里使用 jconsle 时一切正常,然而在家中的机器上却出现了标题所示的问题: jconsole 和 jps 无法显示本地 Java 进程列表。
当时直接利用 -Dcom.sun.management.jmxremote.port=port 启动目标 java 进程并在 jconsole 中通过 localhost:port 方式成功连接上目标 java 进程。有了这个 work around 之后,对这个问题也就没有太在意。
昨天让在公司兼职的同学开 始熟悉 JMX ,结果在他的机器上也出现了同样的问题,我也同样地用上面的偷懒 work around 解决之。不过今天,同学发给了我这个问题的正解。当时没有细看,回家后才想起又搜了一下,使用的 Google 关键字为“ jconsole jps local process ”,第一个页面就是 SDN 上一个讨论这个问题的帖子,跟下去之后总结如下:
在 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 就抓瞎了。
我的情况属于第二种,解决方法自然是对给该目录进行正确的 NTFS 权限设置,方法有不少,比如可以利用 cygwin 下的 chmod 来间接修改 NTFS 的 ACL ,或者直接使用 cacls 来设置该目录的 ACL:
cacls %TMP%\hsperfdata_user /G Everyone:F
以上命令是对所用用户赋予目标目录的所有访问权限——这么做自然是偷了懒……但是当初看 cygwin 手册的时候就被 NTFS 的 ACL 的复杂度给吓到了,一时半会儿实在不想深究这个玩意儿……
另外,为什么该目录位于 FAT 文件系统下也会出问题,我还不知道具体原因。
分享到:
相关推荐
在Unix或Linux系统上,可以通过`ps`命令查找java进程的PID;在Windows系统上,可以通过任务管理器查找java或javaw进程的PID;另外,也可以使用`jps`命令行工具来获取进程ID。 例如,如果测试应用的PID为2956,启动...
在这里,你需要选择“远程进程”选项,并输入远程服务器上的Java进程ID(PID)。如果不清楚PID,可以通过`jps`命令查看。连接成功后,你就能在本地机器上看到远程服务器上的Jconsole界面,实时监控Java应用的状态。 ...
例如,Unix/Linux系统下使用`ps`命令查找Java进程的PID,Windows系统则可以通过任务管理器或`jps`命令获取。连接命令格式为`jconsole [PID]`。 3. **远程监控**: 若要远程监控Java应用,需要知道目标主机的IP地址或...
3. **JPS命令**:`jps`是Java进程状况工具(Java Process Status)的缩写,它是JDK提供的一种实用程序,用于显示当前系统中正在运行的Java虚拟机实例。使用`jps`命令,开发者可以轻松地查看哪些Java应用程序正在运行...
jdb是一个命令行工具,用于对Core文件和正在运行的Java进程进行实时调试。jdb工具包含了丰富的命令,帮助您进行调试。jdb工具的功能与Sun Studio中的dbx非常相似,但jdb专门用于Java应用程序的调试。 jstat jstat...
9. jps.exe:这是一个JVM进程状态工具,用于列出正在运行的Java进程及其ID,类似于Unix系统中的ps命令。 10. jstat.exe:JVM统计监控工具,用于监视垃圾回收、类加载等信息。 11. jstatd.exe:此工具提供了一个...
jdb命令是一个强大的调试工具,用于对core文件和正在运行的Java进程进行实时地调试。jdb工具可以帮助开发者快速地定位问题所在,并提供丰富的命令帮助开发者进行调试。 六、jstat命令 jstat命令是一个实时的命令行...
`jdb` 提供了对core文件和运行中Java进程的实时调试能力。它包含了一系列调试命令,类似于Sun Studio中的dbx工具,但专为Java应用程序设计。`jdb` 支持断点设置、变量检查等功能,是解决复杂运行时错误的强大工具。 ...
类似于Unix系统中的`ps`命令,jps用于列出本地系统上运行的Java进程ID,便于识别和跟踪Java应用程序。你可以通过它查看Java程序的数量以及它们各自的进程ID,这对于进一步的监控和调试非常有用。 2. **jstat (Java...
5. **jps**:Java进程查看器,显示正在运行的Java虚拟机进程。 6. **jstack**:用于生成Java虚拟机的堆栈跟踪信息,帮助诊断线程问题。 7. **jmap**:内存映射工具,用于查看堆和永久代的详细信息。 8. **...
首先,`jps`命令类似于Linux的`ps`命令,用于列出本地正在运行的Java进程ID。`jstat`工具则可以提供虚拟机(VM)的各种统计信息,如垃圾收集(GC)的状态和性能数据。通过`jstat -gc`参数,我们可以获取关于GC的详细...
Java虚拟机(JVM)是Java程序的运行环境,提供了Java程序运行所需的各种资源和管理机制。在Java虚拟机运行过程中,我们可能需要使用各种命令工具来监控和诊断可能出现的问题。以下是一些常用的JVM命令工具及其知识点...
- `jps`:列出系统中正在运行的Java进程ID,方便跟踪和管理Java应用程序。 7. **jinfo**:Java配置信息 - `jinfo -flag <flag> <pid>`:查看或修改指定进程的JVM标志,如内存设置、线程栈大小等。 8. **jmap**:...
- **jps**:Java进程查看器,显示正在运行的Java进程。 - **jcmd**:Java命令工具,提供了JDK诊断命令的统一接口。 3. **Java开发流程**: - 使用文本编辑器编写`.java`源文件。 - 使用`javac`编译源代码,生成...
为了监控Java应用的性能,可以使用`jps`(Java进程状态)列出运行中的Java进程,`jstat`(JVM统计监测工具)查看JVM的统计信息,`jmap`(内存映射工具)生成堆转储,以及`jhat`(堆分析工具)分析堆转储。...
关于进程信息的获取,Java同样提供了一些API可以用来列举和管理Java进程内部的线程。`Thread`类中的`getThreadGroup()`方法可以用来获取当前线程的线程组,通过递归地获取到线程组的父线程组,可以列举出全部活跃的...
综上所述,JDK 自带的 VM 分析工具 jps、jstat、jmap 和 jconsole 提供了丰富的功能,可以帮助开发者有效地监控和诊断 Java 应用程序的性能问题。掌握这些工具的使用方法,不仅有助于提升开发效率,还能显著提高应用...
4. **诊断工具**:`jps`(Java进程查看器)、`jstack`(线程堆栈转储)、`jinfo`(配置信息工具)、`jmap`(内存映射工具)等用于诊断和分析Java应用程序的性能问题。 5. **应用部署**:`appletviewer`用于本地测试...
首先,`jps`(Java Process Status)是Java开发人员必备的工具之一,它能够显示运行在本地机器上的所有Java进程的ID和主类名。通过这个命令,我们可以快速地查看哪些Java应用正在运行,以及它们的进程ID,这对于定位...