前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java调试与定位

Java调试与定位

作者头像
Vincent-yuan
发布2022-05-06 18:28:57
1.1K0
发布2022-05-06 18:28:57
举报
文章被收录于专栏:Vincent-yuan

目录:

  • Java程序测试:JVM调试体系, Intellij 调试, Junit自动化
  • Java程序监控: 常用监控工具, 性能问题
  • Java典型问题:锁问题, 线程池问题,JVM内存基础介绍, JVM内存问题分析与定位, TLS问题, Crash问题

JVM调试体系

简介

JPDA  全称 Java Platform Debugger Architecture. 是Java定义的标准调试框架。

 大部分调试工具都是基于JPDA提供的上层接口,扩展定制而来的。

JVM TI基本原理

JVM TI 是JVM提供的native 编程接口,可以用来获取JVM内部状态,以及控制Java程序的执行。

 JVM TI 的典型能力:

  • 各类事件的钩子(比如类加载)
  • Java对象操控
  • Java线程和锁操控
  • 基本调试原语(比如断点)

一般采用建立一个Agent方式来调用JVM TI , 而控制方往往是另一个独立的进程。

Agent加载的方式:

  • 在JVM启动时,通过命令行选项指定Agent加载。
  • JVM运行时加载。(attach机制)

Java动态追踪技术

JVM内置的 libinstrument.so 

可基于这套 instrumentation 用Java开发Agent。

  • 监控指定方法的执行内容,比如入参,返回值;
  • 指定方法的调用情况,eg,时间戳,调用次数,耗时。
  • 指定方法的调用路径等。

IntelliJ调试

条件断点

双击shift : 搜索

ctrl + 单击 : 查看当前变量或方法被哪些代码引用

Junit自动化测试

junit & Mockito

mock test: 如何在不受其他模块影响的情况下测试一个单独的模块。

常用监控工具

基础故障处理工具

Jps , Jstat, Jinfo,

Jmap: 生成堆转储快照

JHat ,

Jstack: 当前线程的快照。

可视化故障处理工具

JConsole, VisulVM 

JMC: 可持续的在线监控工具。

MAT: 内存分析工具

常用linux诊断命令

strace: 追踪系统调用,获取进程动态信息,获取系统级调用,即程序现在在干什么。

代码语言:javascript
复制
   eg: strace -o strace.txt -T -tt -e trace=all -p <pid>

pstack: 显示进程的线程堆快照。

代码语言:javascript
复制
   eg: pstack <pid> >> pstack.log

pmap: 查询进程的内存映射关系,常用于排查内存泄露。

代码语言:javascript
复制
   eg: pmap -x <pid>

vmstat:监控整个系统资源使用情况。

top: 显示各进程的资源占用状况。

代码语言:javascript
复制
   eg: top -H -p <pid>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JVM调试体系
    • 简介
      • JVM TI基本原理
        • Java动态追踪技术
          • IntelliJ调试
            • Junit自动化测试
              • 常用监控工具
                • 基础故障处理工具
                • 可视化故障处理工具
                • 常用linux诊断命令
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档