为什么jvisualvm看不到我的Play Framework应用程序?

问题描述:

我正在尝试使用jvisualvm来点击Play框架应用程序。为什么jvisualvm看不到我的Play Framework应用程序?

环境:Windows 7中位,Java 7的64位。

步骤

1)增加至-Dcom.sun.management.jmxremote_JAVA_OPTIONS enviornment变量。

Play Output

拿起_JAVA_OPTIONS:-Xms800m -Xmx1500m -XX:PermSize =64米 -XX:MaxPermSize参数=256米-Dcom.sun.manageme nt.jmxremote

2)冉jvisual vm(来自C:\Program Files\java\jdk1.7.0_03\bin)。

3)我没有在本地进程列表中看到Play进程。

我错过了什么?

+0

您可能会看到Play正在运行的JVM,而不是Play本身。找出哪个PID与Play关联,看看是否有帮助。 – duffymo 2012-07-08 13:29:17

+1

在你提供的输出中你可以看到:'pid是8244' - 你确定列表中没有这样的进程吗? – 2012-07-08 13:31:36

+0

@TomaszNurkiewicz - 我确定。 – ripper234 2012-07-08 14:55:03

我的环境

  • 开发PC:Windows 8中,在的VisualVM JDK1.6
  • 服务器:Ubuntu的,JDK1.6,玩1.2.2

用于连接到本地播放应用,唯一的选择“-Dcom.sun.management.jmxremote”是好的。

但是,对于连接到远程Play应用程序,JVM需要更多选项。

由于集_JAVA_OPTIONS环境会影响到所有的Java程序,我改打首发脚本:框架/平阳霉素/播放/ application.py

def java_cmd(self, java_args, cp_args=None, className='play.server.Server', args = None): 
    ... 
    java_args.append('-Dcom.sun.management.jmxremote') 
    java_args.append('-Dcom.sun.management.jmxremote.port=5678') 
    java_args.append('-Dcom.sun.management.jmxremote.ssl=false') 
    java_args.append('-Dcom.sun.management.jmxremote.authenticate=false') 
    java_args.append('-Dcom.sun.management.jmxremote.local.only=false') 
    java_args.append('-Djava.rmi.server.hostname=192.168.0.10') 

    java_cmd = [self.java_path(), '-javaagent:%s' % self.agent_path()] + java_args + ['-classpath', cp_args, '-Dapplication.path=%s' % self.path, '-Dplay.id=%s' % self.play_env["id"], className] + args 
    return java_cmd 

然后重启Play应用程序,并从VisualVM的重新连接。

有,阻止处理从如果他们指定的java.io.tmpdir表示jvisualvm(或JPS)向上的一个错误。见http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7009828

此外,设置com.sun.management.jmxremote以来没有Java 6中是必要的(至少不是连接到一个过程中的相同的机器上)。见http://docs.oracle.com/javase/6/docs/technotes/guides/management/agent.html