(如果我错了,请纠正我)
我明白当你通过发出java命令运行java程序时,
java MyProg
Run Code Online (Sandbox Code Playgroud)
该程序将运行到一个新的JVM上.
是什么将程序加载到新的JVM中?它是JRE产生一个新线程吗?
如果每个程序都在自己的JVM中运行,那么它们是否可以相互通信?
我之前问了一个关于如何使用JMX向本地运行的java程序发送请求的问题.我发现如果在本地发出JMX命令,我不需要端口号.答案是客户端应用程序(例如jconsole,jvisualvm,jprobe等)搜索在机器上运行的Java应用程序.这很好,但考虑到客户端应用程序将在与要监视或通信的应用程序不同的JVM中运行,它们如何在没有端口号的情况下相互连接(因为它们不在同一个JVM上运行)?
如果两个程序正在运行,通常会有2个JVM.JVM是否在同一个JRE流程中运行?并且这也不意味着两个JVM应该能够通信吗?
谢谢
我正在使用jvisualvm分析Web应用程序.我可以看到各种方法需要多长时间,例如methodA需要5秒......但是,我看不到双击此方法以查看5秒的位置.我可以"深入研究".
我如何在jvisualvm中实现这一目标?
谢谢.
当我开始JConsole它标识我的java进程(本地)但它无法连接到它.
Connection Failed: Retry?
The connection to 17424 did not succeed.
Would you like to try again?
Run Code Online (Sandbox Code Playgroud)
再次选择connect会产生相同的错误(17424是java进程的pid).另一方面 jvisualvm工作得很好.在jvisualvm中,我看到以下细节
PID: 17424
Host: localhost
Main class: Conatainer
JVM: Java HotSpot(TM) 64-Bit Server VM (23.6-b04, mixed mode)
Java: version 1.7.0_11, vendor Oracle Corporation
Java Home: /home/aniket/jdk1.7.0_11/jre
JVM Flags: <none>
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过这种情况?这是一个错误吗?有工作吗?
我有一个 Java 应用程序,我想使用 Java VisualVM (jvisualvm )。
但是,在 VisualVM 窗口中可以看到很少的数据。另外,我不能进行堆转储。
这是它的屏幕截图,其中包含我编写的另一个测试应用程序:

我可以监控内存使用情况、加载的类和线程。堆转储、执行 GC 以及采样被禁用。
我曾尝试添加-Dcom.sun.management.jxmremote到虚拟机的参数,如描述在这里。这显示在“安装详细信息”窗口中。但是,它不会出现在 Java 进程参数中。(应该是?)

我还尝试单击我的测试应用程序中的按钮,直到OutOfMemoryError发生。没有堆转储;这并不奇怪,因为 OOME 上的堆转储被禁用。
我能做些什么来解决这个问题?
使用VisaulVM,我想以数据形式获取此数据,而无需应用图像处理算法...我该怎么做?我认为这不会是快照。
我不确定VisualVM和jVisualVM的差异如何,命名肯定会造成混淆,但是我正在运行Oracle提供的(Version 1.7.0_80 (Build 150109))
谢谢!
这些 Keep-Alive-Timer 线程在左侧有白色标签,下面没有描述白色标签的含义。我想知道这些 Keep-Alive-Timer 线程是如何创建的以及为什么。
实际上,我正在使用Timer在我的程序中检查心跳消息。每当心跳到来时,我都会安排一个新的TimerTask,延迟 6 秒。如果没有心跳,TimerTask则触发并发送警报。
用于Java的(相对)新的内置性能监视器/分析器是Mission Control。在甲骨文的文档做广告,他们可以在生产中使用,而不会产生性能开销(不到2%):
工具链[Mission Control + Flight Recorder]使开发人员和管理员可以从本地运行或部署在生产环境中的Java应用程序收集和分析数据。
我已经使用jvisualvm(VisualVM)多年了,但是由于在生产环境中可能会带来性能开销,所以人们从来没有使用过(VisualVM)。
所以我问:任务控制(及其飞行记录器)与VisualVM之间的区别是什么,它使MC / FR不会妨碍性能?还是它们不包括VisualVM提供的某些功能?
我正在尝试将 VisualVM 连接到远程 JMX。IntelliJ 可以轻松连接,但 VisualVM 失败并在日志输出中显示以下内容:
Listening for transport dt_socket at address: 5005
Debugger failed to attach: recv failed during handshake: Resource temporarily unavailable
Debugger failed to attach: handshake failed - received >< - expected >JDWP-Handshake<
Run Code Online (Sandbox Code Playgroud)
这是我在运行时传递的 JVM 属性:
-XX:MaxPermSize=50g -XX:+HeapDumpOnOutOfMemoryError -Xmx50g -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=100.100.100.100 -Dcom.sun.management.jmxremote.port=5006 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
Run Code Online (Sandbox Code Playgroud)
使用 VisualVM 1.3.9。不知道为什么它会失败,为什么 IntelliJ 会成功。我试过禁用 SSL 身份验证等。
我试图在Windows 8计算机上运行visualvm,但出现错误“无法检测到本地Java应用程序”。我尝试按照以下步骤来解决“ https://visualvm.github.io/troubleshooting.html ”中建议的问题。我对我的“ AppData \ Local \ Temp \ hsperfdata_Dhasan”文件夹具有完全权限。但是,无论何时我启动visualvm,我仍然遇到相同的错误。请帮助我解决此问题。
谢谢。
我在使用 Intellij 的 VisualVM Launcher 插件启动我的应用程序时遇到问题。我在启动时收到的消息显示如下:
Error running 'Desktop': appId=81286153463824, jdkHome=null, visualVmHome=/Applications/VisualVM.app
Run Code Online (Sandbox Code Playgroud)
我发现这些帖子与此问题相关:here和here。不幸的是,问题是我找不到第一篇文章中提到的脚本,也不知道如何创建后一篇文章中提到的堆栈跟踪。
我对来自 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)