标签: visualvm

VisualVM 无​​法连接到除 1099 之外的任何端口

我有一个远程 jvm 应用程序在由 kubernetes 管理的 docker 容器内运行:

java -jar /path/to/app.jar
  -Dcom.sun.management.jmxremote  
  -Dcom.sun.management.jmxremote.authenticate=false
  -Dcom.sun.management.jmxremote.ssl=false
  -Dcom.sun.management.jmxremote.local.only=false
  -Dcom.sun.management.jmxremote.port=1099
  -Dcom.sun.management.jmxremote.rmi.port=1099
  -Djava.rmi.server.hostname=127.0.0.1 
Run Code Online (Sandbox Code Playgroud)

当我尝试使用端口转发和 VisualVM 进行调试时,它仅在我在本地计算机上使用端口 1099 时才有效。端口 1098、10900 或任何其他端口均不起作用。这适用于 VisualVM kubectl port-forward <pod-name> 1099:1099:. 这个没有: kubectl port-forward <pod-name> 1098:1099

我在 VisualVM 中使用“添加 JMX 连接”选项,连接到localhost:1099localhost:1098. 前者有效,后者无效。

为什么我不能在 VisualVM 中使用非 1099 端口?

UPD 我相信这个问题与 VisualVM 有关,因为无论我选择什么本地端口,端口转发似乎都能正常工作:

$ kubectl port-forward <pod> 1098:1099
Forwarding from 127.0.0.1:1098 -> 1099
Forwarding from [::1]:1098 -> 1099
Handling connection for 1098
Handling connection for 1098
Run Code Online (Sandbox Code Playgroud)

jvm visualvm docker kubernetes

4
推荐指数
1
解决办法
2791
查看次数

配置文件的应用程序启动得太早

当我尝试执行应用程序启动分析时,Profiled application started too soon附有下面的错误消息屏幕截图。

https://i.stack.imgur.com/9ywTW.png

在我强行终止先前分析的应用程序后,会显示此警告。已重新启动我的系统,但仍然显示该警告。

提前致谢。

java instrumentation jvm visualvm jvisualvm

4
推荐指数
1
解决办法
316
查看次数

基于 Putty SSH 隧道的 VisualVM

我正在尝试分析远程 Java 应用程序,实际上它是一个游戏服务器。它在我的本地机器(带有 JDK1.7.0_02 x64 的 Windows XP x64)上正常工作,但在生产服务器(带有 JDK1.7.0_03 i586 的 CentOS)上表现得非常奇怪。

我做了很多搜索,发现我应该使用 VisualVM 来完成这项任务。所以 VisualVM 在本地机器上运行良好,但在本地机器上没有挂起,我需要在生产环境中使用真实有效负载进行分析。我用参数在远程机器上启动了 jstatd

jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=false &
Run Code Online (Sandbox Code Playgroud)

与策略文件

grant codebase "file:/usr/java/jdk1.7.0_02/lib/tools.jar" {
    permission java.security.AllPermission;
};
Run Code Online (Sandbox Code Playgroud)

然后我像这样启动了我的 Java 应用程序

java -server -Dcom.sun.management.jmxremote\
 -Dcom.sun.management.jmxremote.port=4000\
 -Dcom.sun.management.jmxremote.ssl=false\
 -Dcom.sun.management.jmxremote.authenticate=false\
 -jar /home/pinballSocketServer/pinballSocketServer.jar
Run Code Online (Sandbox Code Playgroud)

application 和 jstatd 都以 root 权限启动。

并且 VisualVM 无​​法连接到远程主机。但是在远程主机上,我看到以下日志,而 VisualVM 正在运行并添加了远程主机:

Feb 16, 2012 7:11:52 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Feb 16, 2012 7:11:56 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: …
Run Code Online (Sandbox Code Playgroud)

jmx visualvm socks jstat ssh-tunnel

3
推荐指数
1
解决办法
1万
查看次数

通过jstatd查看MBean

我试图通过jstatd监视服务器上运行的所有Java进程.我已经设置足够的,我可以连接VisualVM并查看所有正在运行的进程.大多数显示器工作正常,但某些事情(尤其是CPU使用率和MBean)不会显示.相反,它说:

MBeans浏览器

数据不可用,因为无法建立与JMX代理的JMX连接.

我认为问题是应用程序必须通过jstatdRMI注册表而不是本地注册表"宣布" ,所以我尝试了以下(根据这些建议),但它仍然不会显示.我尝试的代码如下:

public class JmxRmiConnectorTest {
    public static void main(String[] args) throws Exception {
        Registry rmiRegistry = LocateRegistry.createRegistry(9994);
        String svc =
            "service:jmx:rmi://localhost:9994/jndi/rmi://localhost:1099/connector";

        MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();

        JMXServiceURL url = new JMXServiceURL(svc);
        RMIConnectorServer rmiServer = new RMIConnectorServer(url, null, mbeanServer);
        rmiServer.start();

        Thread.sleep(100000);

        rmiServer.stop();
    }
}
Run Code Online (Sandbox Code Playgroud)

当通过jstatd查看时,如何让我的MBean和CPU使用率显示在VisualVM中?

java jmx visualvm jstatd

3
推荐指数
1
解决办法
4120
查看次数

使用 jvisualvm 进行内存采样

我正在使用 Java Visual VM 的内存采样功能,但我无法回答以下问题:

  1. 为什么会创建这么多实例?

  2. 为什么这些实例数和字节数不断增加?

例如,我创建了一个非常简单的 Java 程序,如下所示:

public class TestMemory{
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Hello");
        Thread.sleep(60 * 60 * 1000);
    }
} 
Run Code Online (Sandbox Code Playgroud)

我可以在 Java Visual VM 中看到有 611 个类。实例数量不断从 25,000 增加到接近 50,000,然后又回落到 25,000 左右。实例减少的原因可能是由 GC 引起的,但我不知道为什么这些数字如此动态,即使我没有对我的程序做任何事情。

profiling visualvm memory-profiling sampling

3
推荐指数
1
解决办法
2606
查看次数

使用Sigar API获取JVM CPU使用率

我正在使用Sigar来获取应用程序服务器中当前运行的JVM的CPU使用率,并将其存储为此数据的历史视图,但我总是获得0%的CPU百分比.

同时,我保持visualVM打开以监视CPU使用情况,并且我看到CPU%在visualVM中定期更改,而它总是使用Sigar报告0%.

这是我定期运行的代码:

Sigar sigar = new Sigar();
ProcCpu cpu = null;
long pId = sigar.getPid(); // This one gives me the same process ID that I see in visualVM
try {
    cpu = sigar.getProcCpu(pId);

} 
catch (SigarException se) {
    se.printStackTrace();
}
System.out.print(cpu.getPercent());
Run Code Online (Sandbox Code Playgroud)

此代码始终为0%.

在这种情况下,我做错了什么?如何让Sigar显示类似于VisualVM中显示的CPU使用率?

我尝试添加

cpu.gather(sigar, pId);
Run Code Online (Sandbox Code Playgroud)

在调用getProcCpu(pid)之后,即使我不断增加和减少服务器上的负载,我仍然只获得两个值(0.0和9.08729312E-315)...

java jvm visualvm cpu-usage sigar

3
推荐指数
1
解决办法
1万
查看次数

将VisualVM信息另存为数据

使用VisaulVM,我想以数据形式获取此数据,而无需应用图像处理算法...我该怎么做?我认为这不会是快照。

在此处输入图片说明

我不确定VisualVM和jVisualVM的差异如何,命名肯定会造成混淆,但是我正在运行Oracle提供的(Version 1.7.0_80 (Build 150109)

谢谢!

visualvm jvisualvm

3
推荐指数
2
解决办法
2837
查看次数

visualvm-无法检测到本地Java应用程序

我试图在Windows 8计算机上运行visualvm,但出现错误“无法检测到本地Java应用程序”。我尝试按照以下步骤来解决“ https://visualvm.github.io/troubleshooting.html ”中建议的问题。我对我的“ AppData \ Local \ Temp \ hsperfdata_Dhasan”文件夹具有完全权限。但是,无论何时我启动visualvm,我仍然遇到相同的错误。请帮助我解决此问题。

谢谢。

java visualvm jvisualvm

3
推荐指数
1
解决办法
2889
查看次数

无法在 Intellij 中启动 VisualVM 启动器插件

我在使用 Intellij 的 VisualVM Launcher 插件启动我的应用程序时遇到问题。我在启动时收到的消息显示如下:

Error running 'Desktop': appId=81286153463824, jdkHome=null, visualVmHome=/Applications/VisualVM.app
Run Code Online (Sandbox Code Playgroud)

我发现这些帖子与此问题相关:herehere。不幸的是,问题是我找不到第一篇文章中提到的脚本,也不知道如何创建后一篇文章中提到的堆栈跟踪。

我对来自 eclipse 的 Intellij 很陌生,我不知道哪些细节是相关的。下面你会发现一些简单的事实:

IntelliJ IDEA 2018.2.1 (Community Edition)
Build #IC-182.3911.36, built on August 6, 2018
JRE: 1.8.0_152-release-1248-b8 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.6
Run Code Online (Sandbox Code Playgroud)

visualvm intellij-idea jvisualvm

3
推荐指数
1
解决办法
6156
查看次数

使用 VisualVM 在 Kubernetes 集群后面通过 JMX 监控 dockerised Spring Boot 应用程序内部

我想在 Docker 中监控 Spring Boot 应用程序的 JVM 内部,该应用程序在 Kubernetes 集群中作为 Pod 运行。但即使花了相当长的时间,我也无法在任何地方找到满意的答案。我试过指对接受的答案这个,但它只是连接,当我的搬运工在本地运行,并且停止而Kubernetes集群背后连接。

jmx visualvm docker spring-boot kubernetes

3
推荐指数
1
解决办法
857
查看次数