【问题标题】:remote profiling neo4j using visualvm使用visualvm远程分析neo4j
【发布时间】:2019-03-21 20:14:35
【问题描述】:

我正在尝试使用本地笔记本电脑上的 VisualVM 监控 GC 信息,并连接到在运行 ubuntu 16 的远程 EC2 实例上运行在 Oracle JDK 8 上的 Neo4j(企业)应用程序。我可以使用 JMX 连接进行连接,但问题是我可以'不要在 VisualGC(插件)上查看任何内容。消息是“此 JVM 不支持”。

基于此linklink,我在遥控器上运行了jstatd 命令,但这并没有解决问题。接下来,查看这个link,我将jstatd 运行为neo4j 用户,因为这是运行Neo4j 服务的用户。如果我以ubuntu 用户身份运行jstatd,则以下命令有效,但不会在VisualGC 上显示任何数据。

sudo -u neo4j jstatd -p 8888 -J-Djava.security.policy=/home/ubuntu/tools.policy -J-Djava.rmi.server.hostname=neo4j_ip_address

neo4j 用户身份运行上述命令出现此错误:

Could not create remote object access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write")
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
        at java.security.AccessController.checkPermission(AccessController.java:884)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at java.lang.System.setProperty(System.java:792)
        at sun.tools.jstatd.Jstatd.main(Jstatd.java:139)

这些是 tools.policy 文件的正确权限吗?

-rwxr-xr-x 1 neo4j  adm    112 Mar 21 15:41 tools.policy

tools.policy 的内容:

grant codebase "file:/usr/lib/jvm/java-8-oracle/lib/tools.jar" {
   permission java.security.AllPermission;
};

如何让 VisualGC 在这种情况下工作?是否有任何日志让 VisualVM 知道发生了什么?我可以使用其他任何工具来直观地查看 GC 统计信息吗?任何帮助深表感谢。谢谢。

【问题讨论】:

    标签: java ubuntu neo4j visualvm jstatd


    【解决方案1】:

    如果您尝试使用完整路径运行 jstatd 会发生什么?

    sudo -u neo4j /usr/lib/jvm/java-8-oracle/bin/jstatd -p 8888 -J-Djava.security.policy=/home/ubuntu/tools.policy -J-Djava.rmi.server.hostname=neo4j_ip_address

    【讨论】:

    • 这次没有错误。它没有在终端上显示任何内容,似乎服务正在运行。我通过运行 sudo lsof -i -P -n 验证了这一点,并且可以看到 jstatd 在端口 8888 上侦听。但我仍然无法在 VisualGC 上查看任何内容。还有其他步骤吗?
    • 您没有提到您在 VisualVM 中的远程主机配置。你还在使用 JMX 连接吗?您是否直接添加了远程主机?您是否在远程主机高级配置中指定了非默认的jstatd 端口(8888)?
    • 在 VisualVM 上,我已将远程主机和端口指定为 8888。我还尝试在默认端口 1099 上运行 jstatd,并在远程使用端口重定向(由于防火墙限制) sudo iptables -t nat - A PREROUTING -p tcp --dport 8888 -j REDIRECT --to-port 1099 - 不成功。显然,问题似乎在于我的本地和 ec2 实例之间的 n/w 连接,现在能够查看 VisualGC。我不清楚那个端口上的 telnet 是成功的,但为什么 VisualGC 会显示“不支持 jvm”消息?谢谢!
    • 我猜jstatd 会打开类似于 JMX 的其他连接。您可以通过jps remote_EC2_IP:8888 从命令行(无需运行VisualVM)测试jvmstat。如果配置正确,此命令应返回在远程 EC2 上运行的 jstatdneo4j 进程。有关更多详细信息,请参阅jps 的手册页。
    • 我接受您的回复作为答复,以感谢您抽出宝贵时间提供建议。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多