2026/4/16 13:42:10
网站建设
项目流程
啊里网站制作,怎么搭建Wordpress博客,网站设计是后台做的还是前台做的,公司网站怎么做Arthas 是阿里开源的 Java 诊断工具#xff0c;相比 JDK 内置的诊断工具#xff0c;要更人性化#xff0c;并且功能强大#xff0c;可以实现许多问题的一键定位#xff0c;而且可以一键反编译查看源码#xff0c;甚至是直接进行生产代码热修复#xff0c;实现在一个工具…Arthas 是阿里开源的 Java 诊断工具相比 JDK 内置的诊断工具要更人性化并且功能强大可以实现许多问题的一键定位而且可以一键反编译查看源码甚至是直接进行生产代码热修复实现在一个工具内快速定位和修复问题的一站式服务。今天我就带你使用 Arthas 定位一个 CPU 使用高的问题系统学习下这个工具的使用。首先下载并启动 Arthascurl -O https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar启动后直接找到我们要排查的地方 JVM 进程然后可以看到 Arthas 附加进程成功[INFO] arthas-boot version: 3.1.7 [INFO] Found existing java process, please choose one and hit RETURN. * [1]: 12707 [2]: 30724 org.jetbrains.jps.cmdline.Launcher [3]: 30725 org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication [4]: 24312 sun.tools.jconsole.JConsole [5]: 26328 org.jetbrains.jps.cmdline.Launcher [6]: 24106 org.netbeans.lib.profiler.server.ProfilerServer 3 [INFO] arthas home: /Users/zhuye/.arthas/lib/3.1.7/arthas [INFO] Try to attach process 30725 [INFO] Attach process 30725 success. [INFO] arthas-client connect 127.0.0.1 3658 ,---. ,------. ,--------.,--. ,--. ,---. ,---. / O \ | .--. --. .--| -- | / O \ .- | .-. || --. | | | .--. || .-. |. -. | | | || |\ \ | | | | | || | | |.- | -- ---- -- -- -- ---- ------- wiki https://alibaba.github.io/arthas tutorials https://alibaba.github.io/arthas/arthas-tutorials version 3.1.7 pid 30725 time 2020-01-30 15:48:33输出 help 命令可以看到所有支持的命令列表。今天我们会用到 dashboard 、thread 、jad 、watch 、ognl 命令来定位这个 HighCPUApplication 进程。你可以通过官方文档:https://arthas.aliyun.com/doc/commands.html查看这些命令的完整介绍image.pngdashboard 命令用于整体展示进程所有线程、内存、GC 等情况其输出如下[图片上传失败...(image-ecf6af-1650028676968)]可以看到CPU 高并不是 GC 引起的占用 CPU 较多的线程有 8 个其中 7 个是 ForkJoinPool.commonPool。ForkJoinPool.commonPool 是并行流程默认使用的线程池。所以此次 CPU 高的问题应该出现在某段并行流的代码上。接下来要查看最繁忙的线程在执行的线程栈可以使用 thread -n 命令。这里我们查看下最忙的 8 个线程thread -n 8输出如下image.png可以看到由于这些线程都在处理 MD5 的操作所以占用了大量时间 CPU 资源。我们希望分析出代码中哪些逻辑可能会执行这个操作所以需要从方法栈上找出我们自己写的类并重点关注。由于主线程也参与了 ForkJoinPool 的任务处理因此我们可以通过主线程的栈看到需要重点关注 org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication 类的 doTask 方法。接下来使用 jad 命令直接对 HighCPUApplication 类反编译jad org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication可以看到调用的路径是 main-task()-doTask()当 doTask 方法接收到的 int 参数等于某个常量的时候会进行 1 万次的 MD5 操作这就是耗费 CPU 的来源。那么这个魔法值到底是多少呢image.png你可能想到了通过 jad 命令继续查看 User 类即可。这里因为是 Demo所以我没有给出很复杂的逻辑。在业务逻辑很复杂的代码中判断逻辑不可能这么直白我们可能还需要分析出 doTask 的“慢”会慢在什么入参上。这时我们就可以使用 watch 命令来观察方法入参。如下命令表示需要监控耗时超过 100 毫秒的 doTask 方法的入参并且输出入参展开 2 层入参参数watch org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication doTask {params} #cost100 -x 2可以看到所有耗时较久的 doTask 方法的入口都是 0意味着 User.ADMN_ID 常量应该是 0。image.png最后我们使用 ognl 命令来运行一个表达式直接查询 User 类的 ADMIN_ID 静态字段来验证是不是这样得到的结果果然是这样 0[arthas31126]$ ognl org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.UserADMIN_ID Integer[0]需要额外说明的是由于 monitor、trace、watch 等命令是通过字节码增强技术来实现的会在指定类的方法中插入一些切面来实现数据统计和观测因此诊断结束要执行 shutdown 来还原类或方法字节码然后退出 Arthas。在这个案例中我们通过 Arthas 工具排查了高 CPU 的问题首先通过 dashboard thread 命令基本可以在几秒钟内一键定位问题找出消耗 CPU 最多的线程和方法栈然后直接 jad 反复编译相关代码来确认根因此外如果调用入参不明确的话可以使用 watch 观察方法入参并根据方法执行时间来过滤慢请求的入参。可见使用 Arthas 来定位生产问题根本用不着原始代码也用不着通过增加日志来帮助我们分析入参一个工具即可完成定位问题、分析问题的全套流程。AI大模型学习福利作为一名热心肠的互联网老兵我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。一、全套AGI大模型学习路线AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取二、640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获三、AI大模型经典PDF籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获四、AI大模型商业化落地方案因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获作为普通人入局大模型时代需要持续学习和实践不断提高自己的技能和认知水平同时也需要有责任感和伦理意识为人工智能的健康发展贡献力量