而不是每次运行jstatd时都创建防火墙规则(因为它每次都会烦人地选择一个新的随机端口),我让它与SSH隧道一起使用。
首先,我在服务器上运行jstatd以查找需要隧道传输的端口。这是通过(在我的情况下)首先创建一个名为 tools.policy 的策略文件来完成的,其中包含以下内容:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
然后运行以下命令:jstatd -J-Djava.security.policy=tools.policy
然后我确定jstatd通过运行使用的随机端口(可能需要在Linux上使用,我不确定)。sockstat | grep jstat
netstat
然后假设随机端口是55663,我在本地计算机上创建了两个SSH隧道,一个用于标准jstatd端口1099,另一个用于55663,通过在两个终端窗口中运行以下命令(在Windows上没有这样做,但我非常确定putty可以做到这一点):
ssh -L 1099:localhost:1099 login_name@host_name
ssh -L 55663:localhost:55663 login_name@host_name
打开两个隧道后,我打开VisualVM,右键单击左侧的“本地”计算机,然后选择“添加jstatd连接”。我单击右侧的“添加默认值”按钮,并确保端口设置为1099。我点击“确定”按钮保存它,并立即看到我的远程Java进程显示在“本地”部分中。