本文目录一览:
java内存诊断软件?
对于每一个java进程来说都有自己的内存池和使用空间,而这也就意味着会出现内存使用错误等问题,而这时候我们就需要对java内存进行诊断分析,今天云南java培训就一起来了就一下,在进行内存诊断上都有哪些软件可以使用。
Java堆:分析诊断数据
堆转储分析
堆转储可以使用如下的工具进行分析:
EclipseMAT(内存分析工具,MemoryAnalyzerTool)是一个社区开发的分析堆转储的工具。它提供了一些很棒的特性,包括:
可疑的泄漏点:它能探测堆转储中可疑的泄露点,报告持续占有大量内存的对象;
直方图:列出每个类的对象数量、浅大小(shallow)以及这些对象所持有的堆。直方图中的对象可以很容易地使用正则表达式进行排序和过滤。这样有助于放大并集中我们怀疑存在泄露的对象。它还能够对比两个堆转储的直方图,展示每个类在实例数量方面的差异。这样能够帮助我们查找Java堆中增长快的对象,并进一步探查确定在堆中持有这些对象的根;
不可达的对象:MAT有一个非常棒的功能,那就是它允许在它的工作集对象中包含或排除不可达/死对象。如果你不想查看不可达的对象,也就是那些会在下一次GC周期中收集掉的对象,只关心可达的对象,那么这个特性是非常便利的;
重复的类:展现由多个类加载器所加载的重复的类;
到GC根的路径:能够展示到GC根(JVM本身保持存活的对象)的引用链,这些GC根负责持有堆中的对象;
OQL:我们可以使用对象查询语言(ObjectQueryLanguage)来探查堆转储中的对象。它丰富了OQL的基础设施,能够编写复杂的查询,帮助我们深入了解转储的内部。
JavaVisualVM:监控、分析和排查Java语言的一站式工具。它可以作为JDK工具的一部分来使用,也可以从GitHub上下载。它所提供的特性之一就是堆转储分析。它能够为正在监控的应用创建堆转储,也可以加载和解析它们。从堆转储中,它可以展现类的直方图、类的实例,也能查找特定实例的GC根;
jhat命令工具(在/bin文件夹中)提供了堆转储分析的功能,它能够在任意的浏览器中展现堆转储中的对象。默认情况下,Web服务器会在7000端口启动。jhat支持范围广泛的预定义查询和对象查询语言,以便于探查堆转储中的对象;
Java任务控制(JavaMissionControl)的JOverflow插件:这是一个实验性的插件,能够让Java任务控制执行简单的堆转储分析并报告哪里可能存在内存浪费;
Yourkit是一个商业的Javaprofiler,它有一个堆转储分析器,具备其他工具所提供的几乎所有特性。除此之外,YourKit还提供了:
可达性的范围(reachabilityscope):它不仅能够列出可达和不可达的对象,还能按照它们的可达性范围显示它们的分布,也就是,强可达、弱/软可达或不可达;
内存探查:YourKit内置了一组全面的查询,而不是使用ad-hoc查询功能,YourKit的查询能够探查内存,查找反模式并为常见的内存问题分析产生原因和提供解决方案。
更效率、更优雅 | 阿里巴巴开发者工具不完全盘点
从人工到自动化,从重复到创新,技术演进的历程中,伴随着开发者工具类产品的发展。
阿里巴巴将自身在各类业务场景下的技术积淀,通过开源、云上实现或工具等形式对外开放,本文将精选了一些阿里巴巴的开发者工具,希望能帮助开发者们提高开发效率、更优雅的写代码。
由于开发者涉及的技术领域众多,笔者仅从自己熟悉的领域,以后端开发者的视角盘点平时可能有得到的工具。每个工具按照以下几点进行介绍:
Arthas 阿里巴巴2018年9月开源的一款Java线上诊断工具。
工具的使用场景:
Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
使用教程:
基础教程:;id=arthas-basics
进阶教程:;id=arthas-advanced
获取方式:(免费)
开源地址:
Cloud Toolkit 是一款 IDE 插件,可以帮助开发者更高效地开发、测试、诊断并部署应用。通过 Cloud Toolkit,开发者能够方便地将本地应用一键部署到任意机器(本地或云端),并内置 Arthas 诊断、高效执行终端命令和 SQL 等。
工具的使用场景:
每次修改完代码后,是否正在经历反复地打包?在 Maven 、Git 以及其他运维脚本和工具的之间频繁切换?
采用 SCP 工具上传?使用XShell或SecureCRT 登陆 服务器?替换部署包?重启?
文件上传到服务器指定目录,在各种 FTP、SCP 工具之间频繁切换 ?
使用教程:
获取方式:(免费)
工具地址:
ChaosBlade 是一款遵循混沌工程实验原理,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具,可实现底层故障的注入,提供了延迟、异常、返回特定值、修改参数值、重复调用和try-catch 块异常等异常场景。
工具的使用场景:
使用教程:
新手指南
获取方式:(免费)
开源地址:新手指南
该插件用于检测 Java 代码中存在的不规范的位置,并给予提示。规约插件是采用kotlin语言开发。
使用教程:
IDEA插件使用文档:
插件使用文档
Eclipse插件使用文档:插件使用文档
获取方式:(免费)
开源地址:
ARMS 是一款 APM 类的监控工具,提供前端、应用、自定义监控 3 类监控选项,可快速构建实时的应用性能和业务监控能力。
工具的使用场景:
使用教程:
前端监控接入:
应用监控接入:
自定义监控:
获取方式:(收费)
工具地址:
Docsite 一款集官网、文档、博客和社区为一体的静态开源站点的解决方案,具有简单易上手、上手不撒手的特质,同时支持 react 和静态渲染、PC端和移动端、支持中英文国际化、SEO、markdown文档、全局站点搜索、站点风格自定义、页面自定义等功能。
使用教程:
获取方式:(免费)
项目地址:
Freeline 可以充分利用缓存文件,在几秒钟内迅速地对代码的改动进行编译并部署到设备上,有效地减少了日常开发中的大量重新编译与安装的耗时。Freeline 最快捷的使用方法就是直接安装 Android Studio 插件。
使用教程:
获取方式:(免费)
项目地址:
PTS 可以模拟大量用户访问业务的场景,任务随时发起,免去搭建和维护成本,支持 JMeter 脚本转化为 PTS 压测,同样支持原生 JMeter 引擎进行压测。
使用教程:
获取方式:(收费)
工具地址:
KT 可以简化在 Kubernetes 下进行联调测试的复杂度,提高基于Kubernetes的研发效率。
使用教程:
获取方式:(免费)
工具地址:
AHAS 为 K8s 等容器环境提供了架构可视化的功能,同时,具有故障注入式高可用能力评测和一键流控降级等功能,可以快速低成本的提升应用可用性。
工具的使用场景:
使用教程:
获取方式:(免费)
工具地址:
作者:中间件小哥
Arthas,7000 字入门篇
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
推荐使用 arthas-boot,下载arthas-boot.jar,然后用java -jar的方式启动:
注:在运行第2条命令之前,先运行一个java进程在内存中,不然会出现找不到java进程的错误。
打印帮助信息
如果下载速度比较慢,可以使用aliyun的镜像:
1、在 D: 下创建 Arthas 目录,在windows命令窗口下,使用curl命令下载阿里服务器上的jar包,大小138k。
2、使用 java 启动 arthas-boot.jar,来安装 arthas,大小约10M。运行此命令会发现java进程,输入1按回车。则自动从远程主机上下载 Arthas到本地目录。
注意:启动 Arthas 的时候一定要先启动一个 Java 进程。
3、查看按照好的目录
如果下载速度比较慢,可以尝试用阿里云的镜像仓库
1. 比如要下载3.5.4版本,下载的url是:
2. 解压后,在文件夹里有arthas-boot.jar,直接用java -jar的方式启动:
注:如果是Linux,可以使用以下命令解压到指定的 arthas目录
删除下面文件:
直接删除user home下面的.arthas和logs/arthas目录
命令
注意 :在 Windows 中启动 arthas 捕获进程的时候可能会出现如下的报错
直接将启动命令换成
Arthas目前支持Web Console,用户在attach成功之后,可以直接访问:。
可以填入IP,远程连接其它机器上的arthas。
默认情况下,arthas只listen 127.0.0.1,所以如果想从远程连接,则可以使用 --target-ip参数指定listen的 IP
输入dashboard(仪表板),按回车/enter,会展示当前进程的信息,按ctrl+c可以中断执行。
注:输入前面部分字母,按tab可以自动补全命令
获取到 arthas-demo进程的 Main Class
thread 14 会打印线程 ID 14的栈。如果是 thread 1会打印线程ID 1的栈,通常是main函数的线程。
thread 1 示例图
3. 通过jad来反编译Main Class
通过watch命令来查看demo.MathGame#primeFactors函数的返回值:
按 Q 或者 Ctrl+C 退出
如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
如果想完全退出arthas,可以执行stop命令。
查看命令帮助信息,help 命令会打印出所有可以用的命令
作用
打印文件内容,和linux里的cat命令类似;如果没有写路径,则显示当前目录下的文件。
匹配查找,和linux里的grep命令类似,但它只能用于管道命令
举例
使用正则表达式,显示包含2个o字符的线程信息,thread | grep -e "o+"
返回当前的工作目录,和linux命令类似
pwd: Print Work Directory 打印当前工作目录
清空当前屏幕区域
查看当前会话的信息
重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
version
输出当前目标 Java 进程所加载的 Arthas 版本号
history
打印命令 历史
quit
退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
关闭 Arthas 服务端,所有 Arthas 客户端全部退出
keymap
Arthas快捷键列表及自定义快捷键
Arthas 命令行快捷键
显示当前系统的实时数据面板,按q或ctrl+c退出
数据说明
查看当前 JVM 的线程堆栈信息
举例
展示当前最忙的前3个线程并打印堆栈,thread -n 3
当没有参数时,显示所有线程的信息,thread ;当显示1号线程的运行堆栈,thread 1
找出当前阻塞其他线程的线程,有时候我们发现应用卡住了, 通常是由于某个线程拿住了某个锁, 并且其他线程都在等待这把锁造成的。为了排查这类问题, arthas提供了thread -b, 一键找出那个罪魁祸首。thread -b
指定采样时间间隔,每过1000毫秒采样,显示最占时间的3个线程thread -i 1000 -n 3
查看处于等待状态的线程,thread --state WAITING
查看当前 JVM 的信息
查看和修改JVM的系统属性
小结
查看当前JVM的环境属性(System Environment Variables)
查看,更新VM诊断相关的参数
更新指定的选项
通过getstatic命令可以方便的查看类的静态属性
执行ognl表达式,这是从3.0.5版本新增的功能
官网:
参数说明
举例
小结
查看JVM已加载的类信息,“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息
sc 默认开启了子类匹配功能,也就是说所有当前类的子类也会被搜索出来,想要精确的匹配,请打开options disable-sub-class true开关
打印出类的 Field 信息
查看已加载类的方法信息
“Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。
显示 String 类加载的方法,sm java.lang.String
显示String中的toString方法详细信息,sm -d java.lang.String toString
反编译指定已加载类源码
编译 java.lang.String,jad java.lang.String
反编绎时只显示源代码,默认情况下,反编译结果里会带有 ClassLoader信息,通过--source-only选项,可以只打印源代码。方便和 mc/redefine 命令结合使用。 jad --source-only java.lang.Object
反编译指定的函数, jad demo.MathGame main
Memory Compiler/内存编译器,编译.java文件生成.class
加载外部的.class文件,redefine到JVM里
从上面可以得出,我们在 main() 方法新增的内容并没有生效,在 run() 方法新增的内容生效了。
3. jvm相关命令
4. class和classloader相关命令