跳至主要內容
调试排错 - Java动态调试技术原理

调试排错 - Java动态调试技术原理

本文转载自 美团技术团队胡健的Java 动态调试技术原理及实践在新窗口打开, 通过学习java agent方式进行动态调试了解目前很多大厂开源的一些基于此的调试工具。

简介

断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径。但断点调试会在断点位置停顿,使得整个应用停止响应。在线上停顿应用是致命的,动态调试技术给了我们创造新的调试模式的想象空间。本文将研究Java语言中的动态调试技术,首先概括Java动态调试所涉及的技术基础,接着介绍我们在Java动态调试领域的思考及实践,通过结合实际业务场景,设计并实现了一种具备动态性的断点调试工具Java-debug-tool,显著提高了故障排查效率。


gavin-james大约 31 分钟Java JVMJava JVM
调试排错 - Java 问题排查之使用IDEA本地调试和远程调试

调试排错 - Java 问题排查之使用IDEA本地调试和远程调试

Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化;并且在实际的排错过程中,还会用到Remote Debug。IDEA 相比 Eclipse/STS效率更高,本文主要介绍基于IDEA的Debug和Remote Debug的技巧。

Debug开篇

首先看下IDEA中Debug模式下的界面。


gavin-james大约 14 分钟Java JVMJava JVM
调试排错 - Java 问题排查之应用在线调试Arthas

调试排错 - Java 问题排查之应用在线调试Arthas

本文主要介绍Alibaba开源的Java诊断工具,开源到现在已经几万个点赞了,深受开发者喜爱。

Arthas简介

在学习Arthas之前,推荐先看上一篇美团技术团队的Java 动态调试技术原理及实践,这样你会对它最底层技术有个了解。可以看下文中最后有个对比图:Greys(Arthas也是基于它做的二次开发)和Java-debug-tool。


gavin-james大约 14 分钟Java JVMJava JVM
调试排错 - Java 问题排查之JVM可视化工具

调试排错 - Java 问题排查之JVM可视化工具

本文主要梳理常见的JVM可视化的分析工具,主要包括JConsole, Visual VM, Vusial GC, JProfile 和 MAT等。

JConsole

Jconsole (Java Monitoring and Management Console),JDK自带的基于JMX的可视化监视、管理工具。 官方文档可以参考这里在新窗口打开


gavin-james大约 6 分钟Java JVMJava JVM
调试排错 - Java 问题排查之工具单

调试排错 - Java 问题排查之工具单

Java 在线问题排查主要分两篇:本文是第二篇,通过java调试/排查工具进行问题定位。

Java 调试入门工具

jps

jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。

jps常用命令

jps # 显示进程的ID 和 类的名称
jps –l # 输出输出完全的包名,应用主类名,jar的完全路径名 
jps –v # 输出jvm参数
jps –q # 显示java进程号
jps -m # main 方法
jps -l xxx.xxx.xx.xx # 远程查看 

gavin-james大约 7 分钟Java JVMJava JVM
调试排错 - Java 问题排查之Linux命令

调试排错 - Java 问题排查之Linux命令

Java 在线问题排查主要分两篇:本文是第一篇,通过linux常用命令排查。

文本操作

文本查找 - grep

grep常用命令:

# 基本使用
grep yoursearchkeyword f.txt     #文件查找
grep 'KeyWord otherKeyWord' f.txt cpf.txt #多文件查找, 含空格加引号
grep 'KeyWord' /home/admin -r -n #目录下查找所有符合关键字的文件
grep 'keyword' /home/admin -r -n -i # -i 忽略大小写
grep 'KeyWord' /home/admin -r -n --include *.{vm,java} #指定文件后缀
grep 'KeyWord' /home/admin -r -n --exclude *.{vm,java} #反匹配

# cat + grep
cat f.txt | grep -i keyword # 查找所有keyword且不分大小写  
cat f.txt | grep -c 'KeyWord' # 统计Keyword次数

# seq + grep
seq 10 | grep 5 -A 3    #上匹配
seq 10 | grep 5 -B 3    #下匹配
seq 10 | grep 5 -C 3    #上下匹配,平时用这个就妥了

gavin-james大约 11 分钟Java JVMJava JVM
调试排错 - Java 线程分析之线程Dump分析

调试排错 - Java 线程分析之线程Dump分析

Thread Dump是非常有用的诊断Java应用问题的工具。

Thread Dump介绍

什么是Thread Dump

Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是 大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数。


gavin-james大约 19 分钟Java JVMJava JVM
调试排错 - Java 内存分析之堆内存和MetaSpace内存

调试排错 - Java 内存分析之堆内存和MetaSpace内存

本文以两个简单的例子(堆内存溢出MetaSpace (元数据) 内存溢出)解释Java 内存溢出的分析过程。

常见的内存溢出问题(内存和MetaSpace内存)

常见的内存溢出问题(内存和MetaSpace内存)。

Java 堆内存溢出

Java 堆内存(Heap Memory)主要有两种形式的错误:


gavin-james大约 5 分钟Java JVMJava JVM
调试排错 - JVM 调优参数

调试排错 - JVM 调优参数

本文对JVM涉及的常见的调优参数和垃圾回收参数进行阐述。

jvm参数

  • -Xms

堆最小值

  • -Xmx

堆最大堆值。-Xms与-Xmx 的单位默认字节都是以k、m做单位的。

通常这两个配置参数相等,避免每次空间不足,动态扩容带来的影响。

  • -Xmn

新生代大小

  • -Xss

gavin-james大约 6 分钟Java JVMJava JVM