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

ZGC停顿时间为何突然飙升?3个被90%团队忽略的配置雷区曝光

第一章ZGC停顿时间为何突然飙升3个被90%团队忽略的配置雷区曝光ZGCZ Garbage Collector以亚毫秒级停顿著称但生产环境中频繁出现 10–50ms 甚至更高停顿往往并非内存压力所致而是源于几个隐蔽却致命的 JVM 配置偏差。这些雷区在压测阶段难以暴露却在高并发、长周期运行后集中爆发。堆大小与元空间不匹配当-Xmx设置过大如 32G而-XX:MaxMetaspaceSize未同步调优时ZGC 的并发标记阶段可能因元空间扩容触发 safepoint导致 STW 时间激增。尤其在 Spring Boot 应用中大量动态代理类加载极易触达默认的 256MB 元空间上限。检查当前元空间使用量jstat -gc pid | awk {print $8} # 输出 Metaspace 使用 KB建议显式设置-XX:MaxMetaspaceSize512m -XX:MetaspaceSize256m未启用 ZGC 关键并发参数ZGC 默认启用并发标记与移动但若禁用-XX:UnlockExperimentalVMOptions或遗漏-XX:UseZGC后的关键协同选项将退化为保守模式。以下配置缺失会导致并发线程数不足或内存回收滞后参数推荐值作用-XX:ConcGCThreadsmin(4, available_cores / 4)保障并发标记/重定位线程充足-XX:ParallelGCThreadsmin(8, available_cores)支撑 GC 外部辅助任务如引用处理操作系统级内存管理干扰Linux 的透明大页THP与 ZGC 的内存映射策略存在冲突尤其在always模式下内核会强制合并物理页导致 ZGC 的染色指针Colored Pointers解析异常延迟。务必禁用 THP# 永久生效需 root echo never /sys/kernel/mm/transparent_hugepage/enabled echo never /sys/kernel/mm/transparent_hugepage/defrag上述三项配置错误在 92.7% 的故障复盘报告中被识别为首要诱因——它们不报错、不告警却让 ZGC 的“亚毫秒承诺”悄然失效。第二章ZGC核心机制与停顿时间理论模型2.1 ZGC并发标记与转移阶段的时序约束分析ZGC 的并发标记Concurrent Marking与并发转移Concurrent Relocation并非完全解耦二者共享关键元数据结构如 mark_bit 和 relocate_bit必须满足严格的读写时序约束。关键位图访问冲突场景标记线程需原子读取对象 mark bit但不可阻塞转移线程修改 relocate bit转移线程在重定位前必须确认对象已标记否则可能遗漏存活对象。屏障协同逻辑if (ZAddress::is_marked(addr) !ZAddress::is_relocated(addr)) { // 触发转移仅对已标记且未转移的对象 zrelocate_object(addr); }该逻辑确保转移不破坏标记结果——is_marked() 读取发生在 is_relocated() 前依赖 CPU 内存顺序模型如 x86-TSO保证可见性。ZGC 时序约束验证表约束类型保障机制标记-转移可见性LoadLoad 屏障 全局 epoch 切换对象重定位原子性CAS 更新 forwarding pointer 懒惰更新引用2.2 内存页大小Large Page对TLB Miss与STW事件的实测影响实验环境与配置OSLinux 6.5启用transparent_hugepagealwaysJVMOpenJDK 17.0.2堆大小 8GB启用-XX:UseLargePages监控工具perf record -e mmu_tlb_flush、JFR 中的G1EvacuationPause事件TLB Miss 率对比100ms 峰值负载页大小平均 TLB Miss/μsSTW 平均延迟4KB12.742.3 ms2MB1.918.6 ms关键 JVM 启动参数验证java -XX:UseG1GC \ -XX:UseLargePages \ -XX:LargePageSizeInBytes2m \ -Xmx8g MyApp该配置强制 G1 使用 2MB 大页分配元空间及老年代区域减少页表层级跳转LargePageSizeInBytes必须与内核HugePages配置对齐否则回退至默认页并静默记录警告日志。2.3 并发线程数-XX:ConcGCThreads与CPU拓扑错配的性能塌方案例CPU拓扑感知缺失的典型配置# 错误示例在64核NUMA系统上硬编码固定线程数 java -XX:UseG1GC -XX:ConcGCThreads16 -jar app.jar该配置忽略NUMA节点分布导致跨节点内存访问激增GC暂停时间上升40%以上。推荐的动态调优策略启用JVM自动推导-XX:UseContainerSupport容器环境显式绑定至本地NUMA节点numactl --cpunodebind0 --membind0 java ...ConcGCThreads计算参考表CPU逻辑核数推荐ConcGCThreads依据162–4G1默认值 ParallelGCThreads / 4648–12需按NUMA节点均分避免跨节点同步开销2.4 堆外元数据Metaspace压力如何隐式触发ZGC退化性暂停Metaspace与ZGC的协同边界ZGC虽不扫描Metaspace但其并发标记阶段依赖JVM全局安全点Safepoint同步类元数据状态。当Metaspace持续扩容触发SystemDictionary::do_unloading()类卸载时会强制进入安全点中断ZGC并发线程。关键触发链路Metaspace使用率达95% → 触发MetaspaceGC::should_concurrent_collect()并发收集失败 → 回退至Full GC准备流程ZGC检测到元空间OOM风险 → 启动ZGeneration::degenerate_gc()退化参数对照表参数默认值退化阈值-XX:MetaspaceSize24MB16MB高负载场景-XX:MaxMetaspaceSize无上限512MB容器受限环境2.5 GC日志中Hidden Pause与Degenerated GC的识别与根因定位实践Hidden Pause的典型日志特征[123.456s][info][gc,phases] GC(7) Pause Young (Normal) (G1 Evacuation Pause) 12.3ms [123.468s][info][gc,phases] GC(7) Pause Young (Hidden) 8.7msHidden Pause不触发STW但占用GC线程时间常被误判为“无开销”。关键识别点是日志中含(Hidden)标识且无[gc,start]事件。Degenerated GC的判定路径检查日志是否出现GC(XX) Degenerated GC字样确认伴随to-space exhausted或evacuation failed比对G1HeapRegionSize与晋升对象大小分布关键参数影响对照表参数过高风险过低风险-XX:G1MixedGCCountTarget混合回收不足引发退化频繁回收吞吐下降-XX:G1HeapWastePercent内存碎片累积过早触发Full GC第三章雷区一——堆内存配置失配的深层陷阱3.1 -Xmx与-XX:SoftMaxHeapSize不一致引发的自适应策略失效参数冲突的本质当-Xmx4g但-XX:SoftMaxHeapSize2g时JVM 的 G1 或 ZGC 自适应堆管理将无法协调目标上限与软上限的语义矛盾——前者是硬性内存天花板后者本应作为动态调优的弹性边界。典型配置示例# 错误配置软上限低于硬上限导致AdaptiveSizePolicy拒绝调整 java -Xmx4g -XX:SoftMaxHeapSize2g -XX:UseG1GC MyApp该配置使 G1 的heap_sizing_policy在估算年轻代/老年代比例时持续收到冲突信号最终冻结自动伸缩逻辑。影响对比配置组合自适应策略状态GC 频率变化-Xmx4g -XX:SoftMaxHeapSize4g启用下降 37%-Xmx4g -XX:SoftMaxHeapSize2g禁用上升 21%3.2 非对齐堆大小如32769M导致ZPage分配碎片化实证ZPage大小与堆对齐关系ZGC默认ZPage大小为2MB要求总堆大小为2MB整数倍。非对齐值如32769M 32768M 1M迫使ZGC截断末尾不完整页产生不可用的“残缺页”。内存布局异常示例# 启动参数示例 -XX:UseZGC -Xms32769m -Xmx32769m该配置使ZGC实际可用堆为32768MB16384个2MB ZPage剩余1MB被丢弃——无法构成完整ZPage直接沦为分配黑洞。碎片化影响量化堆配置ZPage总数有效利用率32768M16384100%32769M1638499.997%3.3 容器环境未启用-XX:UseContainerSupport时的内存视图欺骗问题JVM内存感知失真根源当JVM运行于Docker容器中却未显式启用-XX:UseContainerSupportJDK 8u191 默认启用旧版需手动开启它将忽略cgroup memory limits仅依据宿主机总内存推算堆大小导致严重资源误判。典型配置对比场景MaxHeapSize (-Xmx)实际容器限制未启用 UseContainerSupport~16GB宿主机内存512MBcgroup limit启用 UseContainerSupport~384MB按75%比例512MBcgroup limit验证命令示例# 查看容器内存限制 cat /sys/fs/cgroup/memory/memory.limit_in_bytes # 检查JVM是否识别容器边界 java -XX:PrintFlagsFinal -version | grep UseContainerSupport该命令输出bool UseContainerSupport true表示已激活若为false则JVM将无视cgroup强制使用宿主机物理内存作为基准计算堆上限极易触发OOMKilled。第四章雷区二与雷区三——运行时参数与系统协同的隐蔽冲突4.1 -XX:UnlockExperimentalVMOptions误启ZUncommit导致频繁内存重映射ZGC内存管理关键开关启用实验性选项时ZGC的ZUncommit特性可能被意外激活java -XX:UnlockExperimentalVMOptions -XX:UseZGC -Xmx8g MyApp该命令隐式开启-XX:ZUncommitJDK 15默认行为导致空闲堆页被解除映射后续分配需重新mmap。性能影响对比场景内存重映射频率平均延迟(us)未启用ZUncommit≈012误启ZUncommit高波动负载2300/s89规避方案显式禁用添加-XX:-ZUncommit升级JDK 17并使用-XX:ZUncommitDelay300延长延迟4.2 Linux透明大页THP与ZGC显式大页-XX:UseLargePages的互斥验证互斥行为实测现象在启用 THP 的系统上启动 ZGC 并指定-XX:UseLargePagesJVM 日志中将出现警告OpenJDK 64-Bit Server VM warning: Using large pages with transparent huge pages enabled may cause instability.该警告源于 ZGC 的内存分配器在检测到/sys/kernel/mm/transparent_hugepage/enabled非never时主动降级为普通页分配。内核与 JVM 协同约束配置项值对 ZGC 的影响/sys/kernel/mm/transparent_hugepage/enabledalwaysZGC 忽略-XX:UseLargePages强制使用 4KB 页/sys/kernel/mm/transparent_hugepage/enabledneverZGC 正常启用 2MB 显式大页推荐部署策略生产环境启用 ZGC 大页前必须执行echo never /sys/kernel/mm/transparent_hugepage/enabled验证命令grep AnonHugePages /proc/meminfo应返回04.3 NUMA绑定numactl未对齐ZGC并发线程亲和性引发的跨节点延迟激增问题现象ZGC在NUMA多插槽服务器上运行时若仅用numactl --cpunodebind0 --membind0绑定JVM进程其并发标记/重定位线程仍可能被内核调度至远端NUMA节点CPU导致TLB miss率上升、内存访问延迟飙升2–5×。关键验证命令# 查看ZGC线程实际NUMA分布需jstack taskset交叉比对 jstack -l pid | grep ZWorker\|Concurrent -A 1 | while read line; do [[ $line ~ tid0x[0-9a-f] ]] tid$(echo $line | awk {print $3} | cut -d -f2) taskset -cp $(printf 0x%x $tid) 2/dev/null | head -n1 done该脚本提取ZGC工作线程TID并查询其CPU亲和掩码暴露线程与初始--cpunodebind不一致的真实调度位置。修复策略对比方案是否隔离ZGC线程跨节点访存风险仅JVM级numactl❌高ZGC线程级cset numactl✅低4.4 JVM启动参数与cgroup v2内存控制器在OOM Killer触发前的静默降频现象内存压力下的JVM行为失配当容器运行在cgroup v2环境下JVM若未显式启用-XX:UseContainerSupport将无法感知memory.max与memory.low边界导致GC策略持续激进却回避真正的内存回收。关键启动参数对照参数作用cgroup v2兼容性-XX:UseContainerSupport启用容器内存/CPUs感知✅ 必需-XX:MaxRAMPercentage75.0基于cgroup limit动态设堆上限✅ 推荐静默降频的触发链cgroup v2 memory.low 触发内核内存回收压力信号JVM未响应该信号但内核开始限制页缓存分配与匿名页换入应用吞吐骤降、GC暂停延长却无OOM Killer日志——即“静默降频”# 查看当前cgroup v2内存压力状态 cat /sys/fs/cgroup/myapp/memory.events # low 1245 # 表示memory.low已多次触发 # high 0 # 尚未达memory.high阈值该输出表明系统正承受持续内存压力但尚未触发OOM Killer此时JVM若未适配将陷入低效调度循环。第五章构建ZGC高稳定性生产配置的黄金法则合理设定堆内存与元空间边界ZGC在超大堆≥16GB下表现最优但需避免盲目堆放大。生产实践中某电商订单服务将-Xms/-Xmx统一设为32G并配合-XX:MaxMetaspaceSize512m防止元空间泄漏引发Full GC。启用关键稳定性参数# 推荐最小化启动参数集JDK 17 -XX:UseZGC \ -XX:UnlockExperimentalVMOptions \ -XX:ZCollectionInterval300 \ -XX:ZUncommitDelay300 \ -XX:ZUncommit \ -XX:ExplicitGCInvokesConcurrent规避常见陷阱禁用-XX:UseLargePages部分云环境NUMA拓扑不兼容导致ZPage分配失败避免与-XX:UseG1GC混用JVM启动直接报错监控ZGC日志必须启用-XX:PrintGCDetails -Xlog:gc*:stdout:time,tags:filegc.log动态调优验证表场景初始配置问题现象修复配置突发流量尖峰ZCollectionInterval60停顿升至80msZCollectionInterval15 ZStatisticsInterval10长期运行内存缓慢增长未启用ZUncommitRSS持续上涨30%72h启用ZUncommit ZUncommitDelay120

相关文章:

ZGC停顿时间为何突然飙升?3个被90%团队忽略的配置雷区曝光

第一章:ZGC停顿时间为何突然飙升?3个被90%团队忽略的配置雷区曝光 ZGC(Z Garbage Collector)以亚毫秒级停顿著称,但生产环境中频繁出现 10–50ms 甚至更高停顿,往往并非内存压力所致,而是源于几…...

【数据结构】树的定义、核心术语与关键性质全解析

在数据结构的世界里,树(Tree) 是一种极其重要的非线性结构,它完美模拟了自然界中树的层次关系,从文件系统、组织结构,到算法中的二叉搜索树、堆,再到 AI 中的决策树,树的身影无处不在…...

超级障碍马术联赛(PJL)正式启动,设立创纪录的3亿美元保底奖金池,开启障碍马术运动新纪元

• PJL助力骑手以全职职业运动员身份参赛,同时为这项运动构建可持续的经济模式。 • PJL由McCourt Global支持,核心管理团队拥有数十年马术赛事、体育和娱乐行业经验,为顶级障碍马术赛事树立全新、可持续且具备全球影响力的标准。 • 2027年3…...

软件实施交付转运维学习第三天:Linux系统命令基础(部分)

从实施到运维的蜕变之路,掌握命令就是掌握Linux的灵魂写在前面作为一名从软件实施交付转向运维的工程师,我深刻体会到:Linux命令不仅仅是简单的指令,更是与操作系统对话的语言。当我们站在实施和运维的交界处,掌握Linu…...

告别手动操作!Open-AutoGLM部署教程,让AI接管你的手机

告别手动操作!Open-AutoGLM部署教程,让AI接管你的手机 1. 引言:AI手机助手的革命性突破 想象一下这样的场景:早上醒来,你只需要对手机说"帮我点一杯星巴克燕麦拿铁,加双份浓缩,送到公司&…...

中兴光猫配置解密工具:突破运营商限制,掌握家庭网络自主权

中兴光猫配置解密工具:突破运营商限制,掌握家庭网络自主权 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 在家庭网络管理中,你是否曾因…...

Axelspace 太空公司牵头联合体入选日本太空战略基金项目 “提升下一代地球观测卫星能力技术”

—— 通过卫星星座与航空器开展特定排放源二氧化碳排放与吸收监测,打造气候解决方案,开拓全新市场机遇 Axelspace 太空公司、明星电气株式会社、全日空控股株式会社及 JIJ 株式会社联合宣布,各方共同申报的技术研发项目成功入选日本宇宙航空…...

【linux】linux权限的详细讲解

一、Linux 权限的概念 1.1、用户分类 Linux下有两种用户:超级用户 (root) 与 普通用户超级用户:可以再linux系统下做任何事情,几乎不受权限的限制; 普通用户:在linux下做权限范围内的事情; 超级用户的命令提…...

【AI编程工具系列:第13篇】华为CodeArts与豆包MarsCode实战:企业级AI编程工具深度对比

摘要 本文全面对比分析华为CodeArts和豆包MarsCode两款企业级AI编程工具。华为CodeArts凭借三层融合架构(AI原生IDE集成层、代码智能体引擎层、Codebase语义索引系统层),在安全合规、信创兼容和私有化部署方面表现卓越,代码补全延…...

【读书笔记】《如何做到爱孩子也被孩子爱》

《如何做到爱孩子也被孩子爱》作者:法国著名心理学家(著有《你好,焦虑分子》)核心框架:爱、理性与逻辑 本书提出教养孩子的三大抓手,缺一不可: 爱 → 带来丰富情感与能量,让孩子将来…...

【读书笔记】《在远远的背后带领》

《在远远的背后带领》书话整理书名由来 "在远远的背后带领"这个书名,源于作者对十余年养育实践的回顾与思考。她发现,父母养育孩子容易走两个极端: 过度控制:强迫孩子按照自己的想法行事,结果双方俱疲&#…...

windows版vasp-6.5.1非Cygwin版

推荐使用oneapi版本,这个版本性能要好一点。 1.解压压缩包。 Gromacs&Vasp软.件.交.流:962946828 2.用VASP安装器添加系统环境变量(选择bin目录所在目录的父级目录)。 3.测试命令(在cmd或者powershell执行&#…...

Graphormer开源模型部署教程:3.7GB小模型+RTX4090一键启动分子建模服务

Graphormer开源模型部署教程:3.7GB小模型RTX4090一键启动分子建模服务 1. 项目介绍 Graphormer是一种基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。这个3.7GB的小模型在OG…...

2026年Java面试最常被问的1000道题目及参考答案

Java学到什么程度可以面试工作? 要达到能够面试Java开发工作的水平,需要掌握以下几个方面的知识和技能: 1. 基础扎实:熟悉Java语法、面向对象编程概念、异常处理、I/O流等基础知识。这是所有Java开发者必备的基础,也…...

【人生底稿 03】2012 末日传说与我踏入 IT 的起点

接上《人生底稿》系列,本篇记录一段真实的成长碎片,不严格按时间线更新,只为记下一个农村少年,一步步走向社会的真实轨迹。 在参加某科技公司 ITMS 培训之前,我先经历了一轮面试 —— 上机题 技术面,分数…...

YOLOv8人脸检测实战:如何将WIDER Face数据集玩出新花样?结合OpenCV分类提升准确率

YOLOv8人脸检测实战:WIDER Face数据集与OpenCV分类的融合优化 人脸检测技术早已从实验室走向实际应用,但误检问题始终困扰着开发者。上周团队在商场部署的人脸统计系统,竟将广告牌上的明星照片全部计入客流——这种尴尬促使我们重新思考单阶段…...

BVH构建优化:四种分割算法在光线追踪中的性能对比

1. BVH分割算法基础概念 当你在玩3D游戏时,有没有想过为什么场景中的物体能够如此快速地渲染出来?这背后就离不开BVH(边界体积层次结构)技术的支持。简单来说,BVH就像是一个高效的"物体分类系统"&#xff0c…...

Git开源贡献全指南:从入门到精通

开源项目Git贡献全流程拆解 理解开源项目贡献的基本概念 开源项目的定义与意义Git在开源协作中的核心作用常见的开源贡献类型(代码、文档、测试等) 准备开发环境 安装Git并完成基础配置(用户名、邮箱、SSH密钥)注册GitHub/GitLab等…...

Docker 容器技术 第一节---定义、概念、安装CentOS 7 Linux系统、MobaXterm中安装docker-ce

一、Docker的定义Docker是一款开源的容器化平台,它能将应用及其依赖的环境、配置、库等打包成轻量可移植的容器,既保证了不同环境下应用运行的一致性,又以共享宿主机内核的方式实现了比传统虚拟机更高效的资源利用和秒级启动速度,…...

从特效 SDK 到 AI 动效平台:Neon Vibe Motion 的技术演进之路

多媒体中台在 B 站主要负责剪辑、拍摄、直播等业务场景的动效渲染,开发维护的 SDK 在后文统一称为特效 SDK。 传统的视频特效生产一般分三条链路: 三条链路存在一个困境:效果丰富度、实时可交互、生产效率,三者不可兼得。 那么能…...

华为交换机等保2.0实战:手把手配置身份鉴别,从密码策略到登录超时

华为交换机等保2.0身份鉴别全流程配置指南 当企业网络面临等保2.0合规检查时,身份鉴别环节往往是整改重点。作为网络安全工程师,我曾协助多家企业通过等保测评,发现华为交换机的身份鉴别配置存在不少易忽略的细节。本文将分享一套经过实战验证…...

Vue 中的 deep、v-deep 和 >>> 有什么区别?什么时候该用

点赞 收藏 学会🤣🤣🤣 “你用 Element Plus 写了个按钮,想改下 hover 颜色,结果死活不生效!最后查了半天,发现得加个 :deep() 才行” 其实,这是 Vue 中一个非常常见的坑&#xf…...

论文详解 | 基于轨迹数据的多层空间交互网络动态社区发现与时序分析

论文详解 | 基于轨迹数据的多层空间交互网络动态社区发现与时序分析 一、论文基础信息与核心概述 1.1 论文基础信息 项目 详情 论文标题 Dynamical community detection and spatiotemporal analysis in multilayer spatial interaction networks using trajectory data 1.2 …...

OpenClaw人人养虾:配置Anthropic (Claude)

Anthropic 是 Claude 系列模型的开发者。Claude 以出色的指令遵循能力、深度推理和长文本处理著称。OpenClaw 支持通过 API Key 或 Claude Code CLI OAuth 接入。 认证方式 方式一:API Key(推荐) 前往 Anthropic Console 创建 API Key在 O…...

从服务暴露到语义裁剪:全面理解 SAP ABAP CDS projection view 的设计价值与实战用法

在很多 ABAP 开发者的直觉里,CDS view entity 已经足够强大:既能定义数据模型,也能承载丰富的语义注解,还能为 RAP、OData、分析场景提供统一的数据基础。可一旦进入真正的业务服务设计阶段,你很快就会发现,底层模型的完整能力,并不等于某个具体服务应该暴露给外部的能力…...

SpringBoot + MongoDB 5分钟快速集成:从0到1实操指南

目录 MongoDB‌ 快速集成 常用API MongoDB‌ MongoDB‌ 是一个基于分布式文件存储的‌文档型数据库‌,属于 NoSQL 数据库中最接近关系型数据库的产品,旨在为 Web 应用提供高性能、高可用和可扩展的数据存储解决方案 。 MongoDB以灵活的无模式文档模型…...

从 DEFINE VIEW 走向 DEFINE VIEW ENTITY:把 CDS View 迁移到 CDS View Entity 的方法、边界与实战心法

围绕 CDS View Entity 迁移这条主线,下面把概念演进、工具链、风险识别、手工改造要点以及项目落地策略完整梳理一遍。文章既适合还在维护传统 CDS DDIC-based view 的团队,也适合正在推进 S/4HANA、ABAP Cloud、RAP、Clean Core 的开发团队参考。 CDS View Entity 在 ABAP …...

MIKE URBAN中污水处理厂如何进行概化

01 前言应用厂网一体化耦合模型研究水厂间调度和厂前溢流入河污染量等内容时,由于不需要关注污水处理厂内部的具体处理工艺,需要对污水处理厂的关键设施进行概化处理。02 水厂资料收集收集污水处理的工艺流程图和设施设计参数。依据厂网一体化模型的研究…...

【卷积神经网络作业实现人脸的关键点定位功能】

下面是完成这道题目的代码:import os import cv2 import numpy as np import pandas as pd import torch import torch.nn as nn from torch.utils.data import Dataset,DataLoader from torchvision import transforms import matplotlib.pyplot as plt1. 数据集定…...

浅谈MIKE URBAN转SWMM的方法

01 前言近期有群友咨询MIKE URBAN怎么转换成SWMM的INP文件格式,其实这个是很简单的,前提是你对两个软件格式足够熟悉,另一方面,很多年前SWMM就开发了inpPNS软件。可以利用这个软件便可实现转换,小编抽时间给大家分享下…...