当前位置: 首页 > news >正文

Start JDKFlightRecorder--人工翻译

可以同时运行多个JFR记录,并且每个JFR记录都可以使用不同的配置,你可以使用不同的JFR记录去捕获不同的事件集。但是,为了使JFR内部逻辑更加精简,生成的记录始终包含当时活动的所有记录的所有事件的并集。这意味着,运行多个JFR记录,得到的记录信息会多余实际所需的信息。

通过集成到JMC里的Flight Recorder插件来使用JFR是最简单直观的。该插件允许通过直观的GUI使用JFR的功能。有关通过JMC来使用JFR的一些详细说明,请查看JMC官方文档的Flight Recorder插件部分

本文介绍允许和管理JFR记录更高级的用法:

  • 使用命令行
  • 使用诊断命令
  • 配置JFR记录
  • 自动创建JFR记录
  • 安全
  • 故障排除

使用命令行 Command Line

在程序启动时,你可以在命令行通过java的-XX:StartFlightRecording选项,来开始并配置一个JFR记录,然后声明-XX:+FlightRecorder选项来启用JFR,因为JFR是一个商业特性,因此还需要声明-XX:+UnlockCommercialFeatures选项

下面这个例子就说明了如何运行MyApp并且同时开启一个60秒的JFR记录,该记录将保存到一个名为myrecording.jfr的文件

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr MyApp

使用诊断命令Diagnostic Command

执行诊断命令最简单的方法是使用jcmd工具(位于java安装目录中)。要发出命令,必须将JVM进程号(或主类的名称)和实际的命令作为参数传递给jcmd。

例如在pid为5368的正在运行的java进程上开启一个60秒的JFR记录,并将其保存到当前目录下命名为myrecording.jfr的文件中

jcmd 5368 JFR.start duration=60s filename=myrecording.jfr

查看所有正在运行的Java进程列表,使用jcmd命令并且不加任何参数。查看对于一个正在运行的Java程序可以使用的所有命令,将help作为pid(或者主类名称)之后的诊断命令。

与JFR相关的命令包括:

  • JFR.start 开始记录
  • JFR.check 检查指定进程的所有运行中的JFR记录的运行情况,包括JFR记录id,文件名,持续时间等
  • JFR.stop 停止指定id的JFR记录(默认情况下停止id为1的记录)
  • JFR.dump 转存指定id的JFR记录,时间为到目前为止收集的数据(默认情况下转储id为1的记录的数据)

配置JFR记录

您可以通过许多其他方式配置JFR记录。无论您如何启动JFR记录(使用命令行或者诊断命令),他们的工作方式都是相同的。

设置大小和寿命

maxsize=size
附加单位为k或K,m或M,g或G,或者不指定单位,默认为1byte字节
maxage=age
附加单位为s秒,或m分,或h小时,或d天数

如果同时设定了大小和寿命限制,则在先达到其中一个限制时将删除数据

设置延迟

在安排JFR记录时,你可能想要在实际开始前添加一个延迟。例如,当从命令行运行时,您可能希望应用程序在开始录制之前启动或达到稳定状态。要实现这一点,请使用delay参数:

delay=delay
附加单位为s秒,或m分,或h小时,或d天数

设置压缩

尽管录制文件格式非常紧凑,但您仍然可以通过将其添加到ZIP存档中进一步压缩。要启用压缩,请使用以下参数:

compress=true

请注意,压缩需要CPU资源,这会对性能产生负面影响。

自动创建JFR记录

当使用默认记录运行时,您可以配置JFR,以便在出现某些指定情况时自动将当前内存中的记录数据保存到文件中。如果还使用了磁盘存储库,则还将包括磁盘存储库中的当前信息。

退出时创建录音

要在每次JVM退出时将记录数据保存到指定路径,请使用以下选项启动应用程序:

-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,dumponexitpath=path

设置应该保存记录的路径。如果指定目录,则在该目录中创建一个以日期和时间作为名称的文件。如果指定文件名,则使用该名称。如果不指定路径,JFR记录文件将保存在当前目录中。

使用触发器创建录音
您可以使用JMC的控制台来设置触发器。触发器是一种规则,只要规则指定的条件为真,它就会执行操作。

例如,您可以创建一个规则,在堆大小超过100 MB时触发JFR记录。JMC中的触发器可以使用通过JMX MBean公开的任何属性作为规则的输入。
在JMX控制台的触发器选项卡定义触发器,有关如何创建触发器的详细信息,请参阅JMC官方文档

安全

JFR仅用于诊断的目的,JFR记录文件可能包含机密信息,如Java命令行选项和环境变量。在存储或传输JFR记录文件时要像诊断核心文件或堆数据转存一样小心。

使用JFR的各种方法的安全权限

Method方法Security安全
Command line命令行每一个可以访问Java程序命令行的人都必须是可信任的
Diagnostic commands诊断命令只有Java进程的所有者可以使用jcmd来控制该进程。
JMC客户端JMC客户端使用JMX访问JVM。

故障排除

通过使用以下选项之一启动JVM,可以从Java Flight Recorder收集大量诊断信息:

  • -XX:FlightRecorderOptions=loglevel=debug
  • -XX:FlightRecorderOptions=loglevel=trace

附:JFR命令参考

Command-Line Options 命令行选项
当您使用java命令行启动你的Java应用程序,您可以指定选项以启用JFR、配置其设置以及开始JFR记录。以下命令行选项特定于Java Flight Recorder:

  • -XX:+|-FlightRecorder
  • -XX:FlightRecorderOptions
  • -XX:StartFlightRecording

这些命令行选项仅在JDK的商业许可证中可用。要使用它们,还必须指定-XX:+UnlockCommercialFeatures选项。

注:使用 -XX 选项的前提是您对系统有透彻的了解,如果这些命令使用不当,可能会影响系统的稳定性或性能。
-XX 选项是试验性的,随时可能更改。

Diagnostic Command Reference 诊断命令参考
这是对可用于控制JFR的诊断命令和每个命令可用参数的描述。也可通过运行 jcmd 命令和指定的进程标识符,后跟 help参数和命令名获取帮助信息。例如,若要获取 JFR.start命令的帮助信息,请运行以下命令:

jcmd 5361 help JFR.start

要获取JVM可用的诊断命令的完整列表,不指定命令名即可,即jcmd 5461 help
与JFR相关的诊断命令包括:

  • JFR.start
  • JFR.check
  • JFR.stop
  • JFR.dump

JFR.start 开启

参数说明类型默认
nameJFR记录名称String
settings服务器端模板String
defaultrecording开始默认录制BooleanFalse
delay延迟开始记录Time0s
duration记录持续时间Time0s(表示“永远”)
filename生成的记录文件名String
compressGZip压缩生成的记录文件BooleanFalse
maxage缓冲区数据的最长期限Time时间0s(表示“无年龄限制”)
maxsize缓冲区的最大大小(字节)Long长0(表示“无最大大小”)

JFR.check 检查

参数说明类型默认
name记录名称String
recording记录IDLong1
verbose打印详细数据BooleanFalse

JFR.stop 停止

参数说明类型默认
name记录名称String
recording记录IDLong1
discard丢弃记录数据Boolean
copy_to_file将记录数据复制到文件String
compress_copyGZip压缩“复制到文件”的目标BooleanFalse

JFR.dump 转存

参数说明类型默认
name记录名称String
recording记录IDLong1
copy_to_file将记录数据复制到文件String
compress_copyGZip压缩“复制到文件”目标BooleanFalse

相关文章:

Start JDKFlightRecorder--人工翻译

可以同时运行多个JFR记录,并且每个JFR记录都可以使用不同的配置,你可以使用不同的JFR记录去捕获不同的事件集。但是,为了使JFR内部逻辑更加精简,生成的记录始终包含当时活动的所有记录的所有事件的并集。这意味着,运行…...

Python3安装pyhanlp最佳解决方法

1、Hanlp介绍 Hanlp是一款中文自然语言处理工具。Hanlp支持多种自然语言处理任务,包括分词、词性标注、命名实体识别、依存句法分析、情感分析、文本分类等。其主要优点包括: 高准确率:Hanlp采用了基于神经网络的分词方法,有效提…...

漏洞管理基础知识

漏洞管理对于端点安全至关重要,是在安全漏洞导致漏洞之前清除安全漏洞的最主动方法之一。 什么是漏洞 漏洞是软件中的错误代码段,会导致软件崩溃或以程序员从未预料到的方式做出响应。黑客可以利用漏洞对计算机系统进行未经授权的访问或对计算机系统执行…...

WBS项目分解的7大基本原则

制定和分解WBS,需要遵循的基本原则: 1、唯一性 每一项工作任务在WBS中是唯一的。 WBS项目分解的7大基本原则 2、负责制 每一项任务都需要明确责任人,一人负责,其他人参与。 3、可测量性 每一项任务都应该是可以量化和测量的&#…...

PoseiSwap IDO在Bounce上启动在即,如何参与?

目前,Nautilus Chain 生态基本完成测试,并即将在不久上线主网。PoseiSwap 作为 Nautilus Chain 上的首个 DEX,也即将面向市场并上线正式版本。我们看到, PoseiSwap 也正式发布了新的市场进程,基于其治理代币 POSE 的 I…...

Linux基本指令介绍

目录 前言 指令操作与图形化界面的对比 adduser passwd whoami ls指令 pwd指令 cd指令 touch指令 mkdir指令 rmdir指令 && rm 指令 man指令 cp指令 mv指令 cat(显示文件内容(全部),且不可修改的)…...

C++服务器框架开发1——项目介绍/分布式/#ifndef与#pragma once

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见:[C高级教程]从零开始开发服务器框架(sylar) C服务器开发1——项目介绍/分布式/#ifndef与#pragma once 项目介绍分布式#ifndef与#pragma once 最近开始学习下C的项目开发,找了很多…...

Tensorflow2基础代码实战系列之双层RNN文本分类任务

深度学习框架Tensorflow2系列 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark …...

Python爬虫-快手photoId

前言 本文是该专栏的第49篇,后面会持续分享python爬虫干货知识,记得关注。 笔者在本专栏的上一篇,有详细介绍平台视频播放量的爬取方法。与该平台相关联的文章,笔者已整理在下方,感兴趣的同学可查看翻阅。 1. Python如何解决“快手滑块验证码”(4) 2. 快手pcursor 3. …...

软件测试人员如何为项目的质量保障兜底?看完你就明白了...

上线前层层保障 01文档管理 关键词:需求文档、设计文档、测试文档 1.需求和设计产出方为产品、开发,测试需要做好流程监督,这里重点说下测试文档。 2.测试文档,从业务领域来说,一般有测试计划、测试用例、业务总结文…...

《幸福关系的7段旅程》

关于作者 本书作者安德鲁∙马歇尔,英国顶尖婚姻咨询机构RELATE的资深专家,拥有 30年丰富的咨询经验,并为《泰晤士报》《观察家》和《星期日快报》撰写专栏文章。已出版19部作品,并被翻译成20种语言。 关于本书 《幸福关系的7段…...

使用Python中PDB模块中的命令来调试Python代码的教程

这篇文章主要介绍了使用Python中PDB模块中的命令来调试Python代码的教程,包括设置断点来修改代码等、对于Python团队项目工作有一定帮助,需要的朋友可以参考下 你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇…...

Codeforces Round 764 (Div. 3)

比赛链接 Codeforces Round 764 A. Plus One on the SubsetB. Make APC. Division by Two and PermutationD. Palindromes ColoringE. Masha-forgetful A. Plus One on the Subset Example input 3 6 3 4 2 4 1 2 3 1000 1002 998 2 12 11output 3 4 1题意: 你可…...

四月,收割12家offer,面试也太容易了吧....

前言 下面是我根据工作这几年来的面试经验,加上之前收集的资料,整理出来350道软件测试工程师 常考的面试题。字节跳动、阿里、腾讯、百度、快手、美团等大厂常考的面试题,在文章里面都有 提到。 虽然这篇文章很长,但是绝对值得你…...

Xubuntu22.04之自动调节亮度护眼redshift(一百七十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...

Spark基础学习笔记----RDD检查点与共享变量

零、本讲学习目标 了解RDD容错机制理解RDD检查点机制的特点与用处理解共享变量的类别、特点与使用 一、RDD容错机制 当Spark集群中的某一个节点由于宕机导致数据丢失,则可以通过Spark中的RDD进行容错恢复已经丢失的数据。RDD提供了两种故障恢复的方式&#xff0c…...

ES6(对象,数组,类型化数组)

对象 1,Object.is 用于判断两个值是否相等, 其内部实现类SameValue算法, 其行为类似于“” 但与“”不同的是 它认为两个NaN是相等的 而0,-0是不相等的 2,Object.assign 表示此方法可以将对象合并成一个 他的第一个…...

JVM系列-第12章-垃圾回收器

垃圾回收器 GC 分类与性能指标 垃圾回收器概述 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,…...

零操作难度,轻松进行应用测试,App专项测试之Monkey测试完全指南!

目录 前言: 一、 Monkey测试的基础参数 1.1 事件类型参数: 1.2 覆盖包 1.3 事件数量 二、 Monkey测试的高级参数 2.1 稳定性级别 2.2 策略参数 2.3 包含选项参数 三、 附加代码 四、 总结 前言: 在移动应用的开发过程中&#xff0…...

Linux安装Docker(这应该是你看过的最简洁的安装教程)

Docker是一种开源的容器化平台,可以将应用程序及其依赖项打包成一个可移植的容器,以便在不同的环境中运行。Docker的核心是Docker引擎,它可以自动化应用程序的部署、扩展和管理,同时还提供了一个开放的API,可以与其他工…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

AspectJ 在 Android 中的完整使用指南

一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...