2

jvisualvm を使用して Play Framework アプリをピアリングしようとしています。

環境: Windows 7 ビット、Java 7 64 ビット。

ステップ:

1)環境変数-Dcom.sun.management.jmxremoteに追加。_JAVA_OPTIONS

再生出力

ピックアップ_JAVA_OPTIONS: -Xms800m -Xmx1500m -XX:PermSize=64m -XX:MaxPermSize=256m -Dcom.sun.management.jmxremote

2) jvisual vm を実行しました (からC:\Program Files\java\jdk1.7.0_03\bin)。

3) ローカル プロセスのリストに Play プロセスが表示されません。

私は何が欠けていますか?

4

2 に答える 2

4

私の環境

  • 開発者用 PC: Windows 8、JDK1.6 の VisualVM
  • サーバー: Ubuntu、JDK1.6、play 1.2.2

ローカルの Play アプリに接続する場合は、「-Dcom.sun.management.jmxremote」オプションのみで OK です。

ただし、リモート Play アプリに接続するには、JVM にさらにオプションが必要です。

set _JAVA_OPTIONS環境はすべての Java プログラムに影響するため、play 開始スクリプトを変更しました: framework/pym/play/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 から再接続します。

于 2012-07-12T13:00:19.073 に答える
4

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を参照してください。

于 2012-07-12T18:13:35.157 に答える