首页 文章 精选 留言 我的

精选列表

搜索[工具库],共10000篇文章
优秀的个人博客,低调大师

arthas 阿尔萨斯 Java诊断工具

下载和安装 curl -O https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar 使用as.sh curl -L https://alibaba.github.io/arthas/install.sh | sh 直接在shell下面执行./as.sh,就会进入交互界面。也可以执行./as.sh -h来获取更多参数信息。 常用的命令 基本命令 help——查看命令帮助信息 cat——打印文件内容,和linux里的cat命令类似 pwd——返回当前的工作目录,和linux命令类似 cls——清空当前屏幕区域 session——查看当前会话的信息 reset——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类 version——输出当前目标 Java 进程所加载的 Arthas 版本号 history——打印命令历史 quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响 shutdown——关闭 Arthas 服务端,所有 Arthas 客户端全部退出 查看系统整体情况 dashboard——当前系统的实时数据面板 thread——查看当前 JVM 的线程堆栈信息 jvm——查看当前 JVM 的信息 sysprop——查看和修改JVM的系统属性 sysenv——查看JVM的环境变量 getstatic——查看类的静态属性 类相关命令 sc——查看JVM已加载的类信息 sm——查看已加载类的方法信息 jad——反编译指定已加载类的源码 mc——内存编绎器,内存编绎.java文件为.class文件 redefine——加载外部的文件,redefine到JVM里 dump——dump 已加载类的 byte code 到特定目录 classloader——查看classloader的继承树,urls,类加载信息,使用classloader去getResource 监控相关 monitor——方法执行监控 watch——方法执行数据观测 trace——方法内部调用路径,并输出方法路径上的每个节点上耗时 stack——输出当前方法被调用的调用路径 tt——方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 问题 初次使用时的一些问题 [ERROR] Target process 9298 is not the process using port 3658, you will connect to an unexpected process. [ERROR] 1. Try to restart as.sh, select process 959, shutdown it first with running the 'stop' command. [ERROR] 2. Try to use different telnet port, for example: as.sh --telnet-port 9998 --http-port -1 这个问题初用者必出,原因为 arthas 选择一个应用进行诊断时弄了一个 session,可以使用 arthas-client ,web arthas client 进行登录,这个提示告诉你要先关闭以前的 arthas-boot ,或者重新选择一个端口。 在 ~/.arthas/lib/3.1.7/arthas 下有一个 arthas-client.jar 使用 java -jar arthas-client.jar 可以进入上次的 session ,shutdown 后就可以选择其它的进程进行诊断了,或者你可以继续诊断当前应用 反编译失败 Memory compiler error, exception message: Compilation Error line: 9 , message: package org.springframework.stereotype does not exist , line: 11 , message: cannot find symbol symbol: class Service , , please check $HOME/logs/arthas/arthas.log for more details. Affect(row-cnt:0) cost in 16 ms. mc命令有可能失败。如果编译失败可以在本地编译好.class文件,再上传到服务器 可以使用sc命名查找相应类的ClassLoader,获取classLoaderHash。再用mc命令进行反编译 # 获取classLoaderHash sc -d *SayService | grep classLoaderHash # classLoaderHash 439f5b3d # 使用classLoaderHash进行反编译 mc -c 439f5b3d /tmp/SayService.java -d /tmp 实战操作 使用monitor命令对类、方法的调用进行监控。 monitor -c 2 com.example.arthastest.service.SayService sayHello 从上图的监控可以看出类SayService的sayHello方法耗时抖动比较大,需进一步排查 使用trace命令对方法内部调用路径,并输出方法路径上的每个节点上耗时统计 trace com.example.arthastest.service.SayService sayHello '#cost > 300' 从上图的监控数据可以看到processName方法耗时多 使用watch命令观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。 watch com.example.arthastest.service.SayService processName "{params,returnObj}" -x 2 '#cost>300' 从上图的监控可以看出传入参数xiaoming时的耗时较多 使用jad反编译指定已加载类的源码 jad --source-only com.example.arthastest.service.SayService # 可以使用如下命令将生成后的源码指定到文件中 jad --source-only com.example.arthastest.service.SayService > /tmp/SayService.java 看到反编译后的代码,基本可以确认问题出在哪里。 使用sc命令获取加载该方法的classLoaderHash sc -d *SayService | grep classLoaderHash 修改源码后使用mc编译.java文件生成.class修改后的源码如下图 mc -c 439f5b3d /tmp/SayService.java -d /tmp 使用redefine命令重新加载修改后的代码 redefine -c 439f5b3d /tmp/com/example/arthastest/service/SayService.class 再次使用相同的参数访问该方法,会发现耗时明显降低。 注意:redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置。 原因是jdk本身redefine和Retransform是不同的机制,同时使用两种机制来更新字节码,只有最后修改的会生效。redefine后使用jad再次查看源码会发现依旧是以前的,这是命令冲突导致的,会使已生效redefine修改失效。 参考文档 官方文档 arthas常用命令

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册