我正在使用Java 7u40 附带的新 Java Mission Control Profiler,我无法进行配置文件分配和收集对象统计信息.无论我做什么,我都无法在Memory - > Object Statistics窗口中看到任何统计信息.
以下命令启动集合:
jcmd <pid> JFR.start duration=60s settings=profile filename=alloc-prof.jfr
Run Code Online (Sandbox Code Playgroud)
在Java的Mission Control文档中没有提到任何具体的选项,以使物体轮廓.我试图创建自己的个人资料并设置:
<flag name="heap-statistics-enabled" label="Heap Statistics">true</flag>
<flag name="allocation-profiling-enabled" label="Allocation Profiling">true</flag>
Run Code Online (Sandbox Code Playgroud)
但仍然没有收集对象统计信息.
为基于JVM的服务确定docker容器的尺寸非常困难(众所周知)。我很确定我们的容器尺寸略有不足,并且想清除一些与我在监视时看到的特定jcmd(本机内存跟踪器)输出有关的问题。
问题:
JCMD输出在这里。
直接字节缓冲区 JMX属性在这里。
一些背景细节:
设置:
JVM选项:
-服务器-Xms1792m -Xmx1792m -XX:MetaspaceSize = 128M-XX:MaxMetaspaceSize = 192M -XX:+ UseG1GC -XX:+ UseStringDeduplication-XX:MaxDirectMemorySize = 256m -XX:NativeMemoryTracking = detail
我在启动时通过为测试中的 Java 程序指定以下 CLI 选项来启动 JFR:
-Xmx24g -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,settings=profile
Run Code Online (Sandbox Code Playgroud)
测试执行需要 90 秒才能完成。
在 Java Mission Control 中打开 JFR 转储后,JMC 中的“调用树”选项卡如下所示:
每秒少于 1 个样本。这使得详细的深入分析、热门方法和概述选项卡实际上毫无用处。经过初步调查,确定方法采样设置为默认值 10 毫秒,事实证明,这种意外结果是因为 90 秒中约 98% 的时间花在等待套接字 I/O 上,同时执行各种不同的数据库读取,所以我只在另外 2% 的时间内获取方法样本。
如何在方法时间中包含 I/O 密集型样本,以帮助找到花费最多时间等待数据库结果的跟踪?该过程包含多个地方的数据库查询,而这些查询又从多个其他地方调用,因此猜测缓慢的调用路径并不容易。
我正在使用Oracle Java Flight Recorder来收集Java应用程序的堆栈跟踪示例.这些堆栈跟踪允许我最终生成CPU Flamegraph.
我的问题是Java Flight Recorder会截断超过64帧的堆栈跟踪.在Flamegraph中很容易观察到并且使用调试器我可以观察到没有FLRStackTrace超过64 FLRFrame秒且几乎所有64帧的堆栈跟踪都将其TruncationState设置为TRUNCATED.
有谁知道这64帧限制是否可以增加?如果堆栈跟踪不完整,则Flamegraphs无用.
在使用jcmd监控java进程时,有一个命令ManagementAgent.start。
检查man page/oracle文档/google,没有找到任何描述。
问题是:
我是一个启用了 JFR 的 java 应用程序,它生成了附加文件,我不熟悉使用 JFR 罐头,所以我需要帮助读取该文件。我需要帮助阅读该文件。应用程序何时启动和停止、使用了多少内存、橙色和粉色条表示什么?
下午 1:28:00 之后没有数据。这意味着什么?
掌握 Java Flight recorder (JFR) 配置,我有一个最合理的配置:
-XX:+UnlockCommercialFeatures -XX:+DebugNonSafepoints -XX:+FlightRecorder
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,dumponexitpath=../logs
-XX:StartFlightRecording=compress=true,maxsize=1g
Run Code Online (Sandbox Code Playgroud)
JFR.check然而,使用表明我没有一个,而是两个正在进行的录音。
Recording: recording=0 name="HotSpot default" (running)
Recording: recording=1 name="Recording 1" maxsize=1.0GB (running)
Run Code Online (Sandbox Code Playgroud)
录音0是怎么发生的?
java ×6
jfr ×5
jmc ×3
jvm ×3
jcmd ×2
flamegraph ×1
heap ×1
linux ×1
memory-leaks ×1
performance ×1
profiling ×1