2011-05-11 49 views
6

我在Windows XP专业机器上运行多个java进程。当我尝试通过本地JConsole连接到这些进程时,进程变灰。当尝试通过JMX进行连接时,本地java进程变灰

但是我可以在另一台机器上运行相同的进程,并通过该机器上的本地JConsole进行连接。

两台机器都为进程和jconsole运行java 1.6版本。

任何想法为什么这些过程变灰?

+0

都运行相同版本的Java 1.6的机器?我有一个模糊的回忆,在某些jdk 1.6版本中存在一些与此相关的错误。 – jtahlborn 2011-05-11 17:08:01

+0

我使用完全相同的JDK从同一个目录运行了一个进程和jconsole。仍然那个过程显示灰色。 – richs 2011-05-11 17:33:29

+0

对,我问是否2个不同的盒子使用相同版本的jdk。 – jtahlborn 2011-05-11 18:44:08

回答

2

如果进程以不同的用户身份运行(例如,如果将他们作为服务启动),那么您将无法连接到它们。另外,如果他们是在一个较老的jvm下运行的,你很可能也无法与他们交谈。

在某些情况下,本地jmx通信机制使用本地文件系统,并且如果权限未正确定义可能会出现问题。你可能在联网的文件系统(nfs,samba)上运行这些进程吗?

2

http://download.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html

应用不属于可连接,禁用管理代理。其中包括在J2SE 1.4.2平台上启动的应用程序,或者在没有-Dcom.sun.management.jmxremotecom.sun.management.jmxremote.port选项的J2SE 5.0平台上启动的应用程序。 这些应用程序在表格中灰显了,JConsole无法连接到它们。在图3-1所示的示例连接对话框中,Anagrams应用程序以J2SE 5.0平台VM启动,没有任何管理属性来启用JMX代理,因此显示为灰色且无法选择。

Figure 3-1 Creating a Connection to a Local Process http://download.oracle.com/javase/6/docs/technotes/guides/management/figures/connect.gif

尽管什么东西被写在文件中,最有可能你的过程,是一个不同的用户下运行。您可以以管理员身份运行jconsole,然后尝试。

+0

我打开了Windows任务管理器和jconsole,我的java进程都是针对同一个用户的。 – richs 2011-05-11 16:57:32

+0

嗨托马斯 - 以管理员身份运行jconsole不能解决问题(尽管我会认为它会)。你碰到过这个吗?有趣的是,以管理员身份运行Process Explorer使其能够查看此特定Java进程的进程信息。解决方法是使用'com.sun.management.jmxremote.port'并使用“Remote Process”进行连接,但对我来说这不是一个最佳解决方案,因为我有很多进程正在运行并为其分配唯一的端口是有问题的。 – sourcedelica 2014-07-05 17:51:46

16

我这个问题,现在的战斗,我发现了一个变通:

您可以将本地用户的临时目录改变的东西,肯定可以访问(如d:\ TEMP)。确保为您要监控的进程和jconsole进程执行此操作。

另一件可能会导致问题的东西是大写字母的用户名。该目录将始终使用全部小写字母创建,但只需将其重命名为其在任务管理器中的显示方式,即可消除所有问题:http://planeofthought.com/wp/?p=75

+1

谢谢RegRog。您的编辑链接完成了+1的技巧。 (我仍然不喜欢告诉我的用户重命名文件夹)。将hsperfdata_ 目录的名称更改为hsperfdata_ 为我工作。 – km1 2012-12-11 22:05:17

+0

这个为我打了头。我在重命名这个目录时也遇到了一个问题,但是我能够使用Sysinternals Process Explorer工具来确定我的SmartSVN副本的目录已被锁定。然后我关闭SmartSVN,重命名目录,一切都很好。该目录在正确的情况下重新创建。 – 2013-03-25 22:59:13

+0

尽可能地相信,这实际上工作!即将TEMP和TMP都设置为c:\ temp。难以置信的。谢谢! – fool4jesus 2017-06-01 12:38:05

1

以下是我的工作原理。我将我的%TEMP%%TMP%环境变量更改为指向我在我的%HOME%位置创建的文件夹(如C:\Users\[YOUR_NAME]\Temp)。一旦我做到了,所有问题都消失了。

2

说你用来启动你的Java应用程序的Windows用户名在任务管理器中看到的是YOUR_USER_NAME。 请在您的临时文件夹中检查名称看起来像hsperfdata_XXXXX(XXXXX应该是您的用户名)的文件夹,并确保YOUR_USER_NAME和XXXXX完全相同(请注意大写和小写)。

0

将环境变量中的TEMP路径更改为D:\ temp之类的内容,因为它可能是许可问题。为我解决这个问题

相关问题