我在我的远程计算机中使用以下命令启动了我的OSGi应用程序:
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=8080 \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar bin/felix.jar
Run Code Online (Sandbox Code Playgroud)
在我的本地机器上,我有VisualVM,我尝试连接到远程JVM实例:



我错过了什么?
谢谢!
我在Java中有一个简单的多线程echo服务器代码(它返回收到的任何内容返回给客户端).我正在分析服务器的各种资源,包括线程统计信息.以下是根据已连接客户端数量的一些统计信息.我的问题是基线(客户0的数量)与非基线的比较!
1)为什么当单个客户端连接时,总线程数增加2?(对于其余的,增加1是有意义的)
2)两个非守护程序线程是什么?!为什么守护进程最初增加1然后被修复?
它们是随机的吗?!
# clients 0 1 2 3 4 5 6 7 8 9 10
Total Started Thread Count 15 18 19 20 21 22 23 24 25 26 27
Thread count 14 16 17 18 19 20 21 22 23 24 25
Peak thread count 14 16 17 18 19 20 21 22 23 24 25
Daemon thread count 12 13 13 13 13 13 13 13 13 13 13
Run Code Online (Sandbox Code Playgroud)
这是服务器的代码段.我正在使用RMI(用于客户端轮询消息)和服务器套接字(用于客户端发送消息).如果需要其他课程,请告诉我.
package test;
import java.io.BufferedReader;
import java.io.IOException; …Run Code Online (Sandbox Code Playgroud) JProfiler提供实时调用树视图,因此您可以实时查看使用CPU的内容并深入了解详细信息.随时将计数重置为零,冲洗,重复.
我目前没有这个工具,并试图通过免费/开放替代方案.jvisualvm和NetBeans探查器具有静态快照调用树和实时平面视图.似乎有理由会有一个实时的调用树视图(或作为一个插件),但我似乎找不到一个.
这种功能仅适用于商业分析器吗?
谢谢.
当我想用jvisualvm 1.3.8描述从eclipse开始的java程序时,我在eclipse控制台中收到错误信息:
Software caused connection abort: socket write error.
Run Code Online (Sandbox Code Playgroud)
当我从命令行控制台启动没有eclipse(java -jar ...)的程序时,也会发生这种情况.我从JDK 1.8.0_20测试了jvisualvm并下载了最新版本1.3.8.这是堆栈跟踪:
Profiler Agent: Waiting for connection on port 5140 (Protocol version: 15)
Profiler Agent: Established connection with the tool
Profiler Agent: Local accelerated session
Profiler Agent: Connection with agent closed
Profiler Agent Error: Exception when trying to send response or command to client:
java.net.SocketException: Software caused connection abort: socket write error
*** Profiler engine warning: class load hook invoked at inappropriate time for java.lang.Throwable$PrintStreamOrWriter, loader = null
*** …Run Code Online (Sandbox Code Playgroud) 我发现了用于分析java核心转储的工具,它非常接近,但是当我打开jvisualvm并打开"文件"菜单时,"添加VM Coredump"选项不可用.当我运行溢出文章中列出的其他选项时,我没有得到线程转储.我正在深入研究jmap命令,但我想知道如何使用Add VM Coredump功能,因为它会让生活变得更轻松.
我试图描述一个简单的算法:"插入排序".代码获取要排序的元素数,然后随机创建那些排序开始之后的元素.
我正在使用Visual VM进行性能分析.但是,当我开始分析时,我在控制台上看到以下警告消息:
objc[62944]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/bin/java (0x10004f4c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x1078054e0). One of the two will be used. Which one is undefined.
Profiler Agent: Waiting for connection on port 5140 (Protocol version: 15)
Profiler Agent: Established connection with the tool
Profiler Agent: Local accelerated session
Profiler Agent Warning: JVMTI classLoadHook: class name is null.
Profiler Agent Warning: JVMTI classLoadHook: class name is null.
Profiler engine warning: class
sun.reflect.GeneratedSerializationConstructorAccessor29 that should be instrumented is not loaded by …Run Code Online (Sandbox Code Playgroud) 简单地阅读教程和使用JVisualVM,我可以手动将它附加到长时间运行的服务器或Swing应用程序,但我也想将它用于在一秒钟内运行的短程序.
我想我可以在控制台上安装我的程序块,连接JVisualVM,然后按一个键让程序完成它的实际工作.是否有较少的kludgy解决方法?
(这主要是出于我自己的好奇心,使用像JVisualVM而不是-Xprof或HPROF这样的抛光GUI会很不错.
知道给定JVM实例当前加载哪些类是很方便的.
例如,有没有办法让他们通过JVisualVM?
编辑:我知道@ Java提供的解决方案- 获取JVM中加载的所有类的列表,但我想知道是否有办法通过JVisualVM或其他工具来实现.目前我正在反对RCP应用程序,我宁愿不必通过该java工具运行应用程序(我很懒,是的).
我有一个内存转储文件,它有近5000个特定对象的实例.这些对象将被写入数据库,我这样做的方法是在jvisualvm中编写一个OQL查询,以生成一个字符串,用作SQL插入,例如
select "insert into trades (id, tradeNumber) values ("+ x.id+ ", " + x.tradeNumber +");" from com.test.application.TradeObject x;
Run Code Online (Sandbox Code Playgroud)
当我通过OQL运行时,我得到一个这样的结果集 -
<code>
insert into trades (id, tradeNumber) values (1,12345);
insert into trades (id, tradeNumber) values (2,123456);
insert into trades (id, tradeNumber) values (3,123457); </code>
Run Code Online (Sandbox Code Playgroud)
等等
但是,由于实例总数很大(大约5000),JvisualVM只显示其中的大约100个.然后出现错误消息"结果太多.请优化您的查询."
我无法优化查询,因为我必须以这种方式解析所有实例.有没有办法可以让JvisualVM向我显示所有实例而不限制结果数量?
我还看到Jvisual vm显示前100个没有任何过滤器的实例,是否可以通过OQL查询获得接下来的100个实例等等?
谢谢
根据我今天的经验,我发现Oracle的Java VisualVM显示cpu使用率占总机器核心的百分比,即使受监控的JVM在操作系统中设置的进程关联性有限.这是在"监视器"选项卡中.
限制受监控的jvm taskset(在linux,Ubuntu上),当处理器允许jvm接近100%利用率时htop,VisualVM中显示的cpu百分比显然等于cpus的总数除以允许的处理器数量.监控jvm.因此,对于这种情况,比例的分辨率是不够的.
您能否确认您在其他操作系统或一般情况下观察到相同的情况?
在显示cpu使用情况时,有没有办法让VisualVM帐户只用于亲和力分配的核心?