生产环境下的Java排错调优 (JUG).ppt
文本预览下载声明
示例 1、jmap –heap的输出解释 2、jmap –histo的输出解释 3、jmap –permstat的输出解释 第*页 JDK内存工具使用介绍 - JHat jHat可以分析一个二进制的hprof日志文件,提供一个web界面用来查询和分析java的内存使用情况,其提供了一种类似SQL的OQL查询语句使得这个查询变得很简单。 可以用它来找出一些垃圾对象的意外引用 – 从而导致垃圾无法回收,也就引发了内存泄露。 OQL的语法是: Select 选择用的Javascript表达式 from [instanceof] 类名 对象名 where Javascript语法的布尔表达式。 示例 1、使用jmap和jhat等工具分析Java程序内存泄露问题。 第*页 THANK YOU 生产环境下的Java排错调优 @施懿民 WE ARE HIRING! 远程调试 远程调试架构 Java平台调试器架构 第*页 组件 调试器接口 / |--------------| / | VM | 被调程序 -----( |--------------| ---- JVMTI – Java虚拟机工具接口 \ | 后台 | \ |--------------| / | 通信渠道 --( | ------------ JDWP – Java调试传输协议 \ | / |--------------| / | 前台 | 调试器 -----( |--------------| ---- JDI – Java调试接口 \ | UI | \ |--------------| 远程调试原理 通过客户机-服务器架构,可以在本地调试 Java 程序,也可以通过网络进行远程调试,JPDA 规范中的两个术语:连接器和传输。连接器是一个 JDI 抽象,用来在调试器应用程序和目标 VM 之间建立连接。传输定义应用程序如何进行访问,以及数据如何在前端和后端之间传输。连接器 “映射” 到可用的传输类型和连接模式。在 Sun 的 JPDA 参考实现中,为 Microsoft? Windows? 提供了两个传输机制:套接字传输和共享内存传输。可用的连接器: 连接套接字连接器 连接共享内存连接器 监听套接字连接器 监听共享内存连接器 启动命令行连接器 第*页 远程调试命令参数 -Xdebug: 启用调试特性。 -Xrunjdwp:sub-options :在目标 VM 中加载 JDWP 实现。它通过传输和 JDWP 协议与独立的调试器应用程序通信。下面介绍一些特定的子选项。 从 Java V5 开始,您可以使用 -agentlib:jdwp 选项,而不是 -Xdebug 和 -Xrunjdwp。但如果连接到 V5 以前的 VM,只能选择 -Xdebug 和 -Xrunjdwp。 -Xrunjdwp 子选项。 transport:这里通常使用套接字传输。但是在 Windows 平台上也可以使用共享内存传输。 Server:如果值为 y,目标应用程序监听将要连接的调试器应用程序。否则,它将连接到特定地址上的调试器应用程序。 address:这是连接的传输地址。如果服务器为 n,将尝试连接到该地址上的调试器应用程序。否则,将在这个端口监听连接。 suspend:如果值为 y,目标 VM 将暂停,直到调试器应用程序进行连接。 第*页 演示 – 设置远程调试 1、被调试程序当作调试服务器。 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8765 2、被调程序当作调试客户端。 -Xdebug -Xrunjdwp:transport=dt_socket,address=:8000 第*页 断点的实现原理 断点(Break Point)可以说是调试器的关键技术,需要软件和硬件的协作才能实现。一般断点的实现方式有下面几种: 通过特定的指令通知
显示全部