Java调试

简介: 线上load高的问题排查步骤是: 先用top找到耗资源的进程 ps+grep找到对应的java进程/线程 jstack分析哪些线程阻塞了,阻塞在哪里 jstat看看FullGC频率 jmap看看有没有内存泄露 使用jstack查看的例子:   C:\Users\Iammeaz>j...

线上load高的问题排查步骤是:

  1. 先用top找到耗资源的进程
  2. ps+grep找到对应的java进程/线程
  3. jstack分析哪些线程阻塞了,阻塞在哪里
  4. jstat看看FullGC频率
  5. jmap看看有没有内存泄露
使用jstack查看的例子:

 

C:\Users\Iammeaz>jstack 4696
2016-01-08 10:26:06
Full thread dump Java HotSpot(TM) 64-Bit Server VM (11.3-b02 mixed mode):
 
"Low Memory Detector" daemon prio=6 tid=0x000000006a63f800 nid=0x1790 runnable [0x0000000000000000..0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
 
"CompilerThread1" daemon prio=10 tid=0x000000006a63a400 nid=0x1780 waiting on condition [0x0000000000000000..0x000000006
   java.lang.Thread.State: RUNNABLE
 
"CompilerThread0" daemon prio=10 tid=0x000000006a62d000 nid=0x136c waiting on condition [0x0000000000000000..0x000000000
   java.lang.Thread.State: RUNNABLE
 
"JDWP Command Reader" daemon prio=6 tid=0x000000006a612c00 nid=0x13c0 runnable [0x0000000000000000..0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
 
"JDWP Event Helper Thread" daemon prio=6 tid=0x000000006a612000 nid=0x1bf4 runnable [0x0000000000000000..0x0000000000000
   java.lang.Thread.State: RUNNABLE
 
"JDWP Transport Listener: dt_socket" daemon prio=6 tid=0x000000006a60b000 nid=0x1be0 runnable [0x0000000000000000..0x000
   java.lang.Thread.State: RUNNABLE
 
"Attach Listener" daemon prio=10 tid=0x000000006a5f7c00 nid=0x1340 waiting on condition [0x0000000000000000..0x000000000
   java.lang.Thread.State: RUNNABLE
 
"Signal Dispatcher" daemon prio=10 tid=0x000000006a5a5800 nid=0x11e0 runnable [0x0000000000000000..0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
 
"Finalizer" daemon prio=8 tid=0x000000006a594000 nid=0x13c4 in Object.wait() [0x000000006a9ef000..0x000000006a9ef890]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x000000004a071210> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
        - locked <0x000000004a071210> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
 
"Reference Handler" daemon prio=10 tid=0x000000006a593400 nid=0x1598 in Object.wait() [0x000000006a8ef000..0x000000006a8
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x000000004a071078> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:485)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
        - locked <0x000000004a071078> (a java.lang.ref.Reference$Lock)
 
"main" prio=6 tid=0x000000000062c800 nid=0x1190 at breakpoint[0x00000000025bf000..0x00000000025bfc50]
   java.lang.Thread.State: RUNNABLE
        at com.damonzh.maxsubseqsum.Demo01.MaxSubseqSum1(Demo01.java:15)
        at com.damonzh.maxsubseqsum.Demo01.main(Demo01.java:7)
 
"VM Thread" prio=10 tid=0x0000000000525000 nid=0x14cc runnable
 
"GC task thread#0 (ParallelGC)" prio=6 tid=0x0000000000471400 nid=0x105c runnable
 
"GC task thread#1 (ParallelGC)" prio=6 tid=0x0000000000472800 nid=0xe94 runnable
 
"GC task thread#2 (ParallelGC)" prio=6 tid=0x0000000000474000 nid=0x180c runnable
 
"GC task thread#3 (ParallelGC)" prio=6 tid=0x0000000000475400 nid=0xe14 runnable
 
"VM Periodic Task Thread" prio=10 tid=0x000000000046d400 nid=0x494 waiting on condition
 
JNI global references: 1062
 
但这个还不是重点,那么问题来了(blue fly is the strongest):这些工具如何能获取远程Java进程的信息的?又是如何远程控制Java进程的运行的?

相信有不少人和我一样对这些工具的 实现原理 。

Java调试体系JPDA

Java虚拟机设计了专门的API接口供调试和监控虚拟机使用,被称为Java平台调试体系即Java Platform Debugger Architecture(JPDA)。

相关文章
|
7月前
|
存储 安全 Java
基于Java+MySQL停车场车位管理系统详细设计和实现(源码+LW+调试文档+讲解等)
基于Java+MySQL停车场车位管理系统详细设计和实现(源码+LW+调试文档+讲解等)
|
7月前
|
搜索推荐 算法 小程序
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
|
7月前
|
安全 小程序 Java
基于Java实训中心管理系统设计和实现(源码+LW+调试文档+讲解等)
基于Java实训中心管理系统设计和实现(源码+LW+调试文档+讲解等)
|
7月前
|
存储 小程序 Java
基于Java图书馆管理系统详细设计和实现(源码+LW+调试文档+讲解等)
基于Java图书馆管理系统详细设计和实现(源码+LW+调试文档+讲解等)
|
3月前
|
XML 前端开发 Java
JAVA调试webservice接口
JAVA调试webservice接口
63 0
|
5月前
|
IDE Java 测试技术
揭秘Java高效编程:测试与调试实战策略,让你代码质量飞跃,职场竞争力飙升!
【8月更文挑战第30天】在软件开发中,测试与调试对确保代码质量至关重要。本文通过对比单元测试、集成测试、调试技巧及静态代码分析,探讨了多种实用的Java测试与调试策略。JUnit和Mockito分别用于单元测试与集成测试,有助于提前发现错误并提高代码可维护性;Eclipse和IntelliJ IDEA内置调试器则能快速定位问题;Checkstyle和PMD等工具则通过静态代码分析发现潜在问题。综合运用这些策略,可显著提升代码质量,为项目成功打下坚实基础。
75 2
|
5月前
|
搜索推荐 JavaScript 前端开发
简单实用,Python代码调试利器/java代码的设计和解读
尽管有许多高级调试工具,但在多数情况下,`print()`仍是便捷之选。`icecream`库则将`print()`调试法发挥到极致,简化变量检查与信息输出,提升调试效率。无论是基本变量还是复杂数据结构,`icecream`都能轻松应对,并支持自定义输出格式,让你的调试工作更高效。下面,让我们一起探索`icecream`的更多实用功能吧!
28 0
|
6月前
|
运维 监控 Java
函数计算产品使用问题之Java 17作为运行时环境,并已使用WebIDE完成代码的修改和调试,如何部署代码
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
7月前
|
安全 小程序 Java
基于Java考研助手网站设计和实现(源码+LW+调试文档+讲解等)
基于Java考研助手网站设计和实现(源码+LW+调试文档+讲解等)
|
7月前
|
IDE Java Linux
在Maven中设置JVM系统参数及Java应用调试实例
在Maven中设置JVM系统参数及Java应用调试实例
392 0