weblogic performance tuning - oracle...weblogic server 内核调优...
TRANSCRIPT
2 | © 2011 Oracle Corporation — 版权所有,属于机密信息
以下内容旨在概述产品的总体发展方向。该内容仅供参考,不可纳入任何合同。该信息不承诺提供任何资料、代码或功能,并且不应该作为制定购买决策的依据。描述的有关 Oracle 产品的任何特性或功能的开发、发行和时间规划均由 Oracle 自行决定。
超强 (WLS/Java) 性能研讨会WebLogic Server 性能调优
Jonathan Leung
FMW APAC 性能专家
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
4
议题
• WebLogic Server 内核调优
• Web 应用程序调优
• JDBC 调优
• EJB/MDB 调优
• JMS 调优
• 应用程序调优
• 超时调优
• 诊断性能问题
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
5
WebLogic Server 内核调优与网络相关的可调整参数
• WebLogic Server 10.3.2+
• 最大线程数量为 4。
• WebLogic Server 10.3.1(及更低版本)
• 合成器线程数量 = CPU 数量 + 1
• 在采用多核 CPU 的较大系统上,合成器线程数量很容易超过 100
• 同步时的胖锁争用导致 CPU 利用率增加
• 合成器线程数量限制:-Dweblogic.SocketReaders=4
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
6
WebLogic Server 内核调优网络调优
• 始终验证 WebLogic 正在使用 NativeIO。以下消息指示其正在使用中
• <Aug 7, 2012 8:32:10 AM CDT> <Info> <Socket>
<BEA-000446> <Native IO Enabled.>
• 从 32 位 JVM 切换至 64 位 JVM 时需格外注意。32
位 WebLogic Server 下载文件不含套接字合成器所需的 64 位本地库。
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
7
WebLogic Server 内核调优Exalogic 优化
• 开启 Domain->Configuration->General 下的“ExalogicOptimizationsEnabled”标志
• 这将启用以下内核优化
• 纯 java NIO 套接字合成器
• 分散读取
• 集中写入
• JSSE 作为 SSL 提供程序
• 无锁定请求管理器
• 更加主动的自调优线程算法
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
8
WebLogic Server 内核调优监视通道连接
• 确保所有受管服务器中不出现 TCP 连接数过量或不平均的问题
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
9
WebLogic Server 内核调优线程
• 监视堵塞线程、队列长度、吞吐量
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
10
WebLogic Server 内核调优堵塞线程
• WLS 会监视其线程,以检测线程在处理某个请求时是否耗费过长时间。• “过长”是由 Stuck Thread Max Time (600 秒)定义的
• WLS 在检测到此类线程时会采取何种措施?• 将线程标记为 STUCK
• WLS 会立即记录一条包含线程堆栈行踪的警告消息
• 增加相应工作管理器的堵塞线程数
• 如果计数大于或等于堵塞线程数,则采取故障操作
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
11
WebLogic Server 内核调优堵塞线程(续)
• WebLogic Server 不会终止堵塞的线程
• 堵塞线程不一定是堵塞的• 只是运行时间较长
• 只表示在检测到线程时,所记录的堆栈行踪正处于当前执行的线程
• 该线程在被检测到之前或之后可以执行其他任务!
• 当您遇到一个堵塞的线程时• 定期完成多次线程转储
• 随时查看堵塞线程的堆栈行踪及其进度对于诊断问题非常重要。
• 可将 WLDF 配置为自动创建一个将包含一系列线程转储的事件
• Oracle SOA Suite 域可完成此 OOTB
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
12
WebLogic Server 内核调优工作管理器调优
• 仅根据需要创建工作管理器来避免线程不足
• 公平份额工作管理器通常可满足您的需要
• 监视
• 挂起的请求
• 最长等待时间
• 当前等待时间
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
13
WebLogic Server 内核调优工作管理器调优(续)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
14
WebLogic Server 内核调优工作管理器限制调优
• 最大线程数限制
• 限制为工作管理器处理请求的并发线程的数量
• 用于配置 MDB 并发性• 默认值是 16
• 容量限制
• 限制(当前正在处理和队列中的)总请求数,以避免资源问题。达到此容量限制时• HTTP 请求会获得一个 HTTP 503 响应
• RMI 客户端会获得一个 QueueThrottleException 响应
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
15
WebLogic Server 内核调优工作管理器限制调优(续)
• 最小线程数限制
• 保证有一定数量的线程可用于处理请求,从而避免线程不足
• 仅在绝对必要时使用
• 请使用非常小的值(例如 3)
• 如果尚未达到限制,则 WebLogic Server 会立即安排工作,直到达到最小线程数
• 设置过高的值会影响其他工作管理器的工作
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
16
WebLogic Server 内核调优独立 Java 客户端
• 首选 wlfullclient.jar
• 替代 weblogic.jar
• 使用 WebLogic JarBuilder 实用程序生成
• 使用 WLST 的客户端需要完整安装
• 如果 jar 大小至关重要,则使用 wlthint3client.jar
• wlclient.jar 使用 Java ORB
• 从 t3 URL 自行转换为使用 IIOP。
• 通常慢于 wlfulllclient.jar
• 对于多线程客户端不具备可伸缩性
• 用 wlthint3client.jar 替代 wlclient.jar
• 使用 t3 运行时提高速度和可伸缩性!
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
17
议题
• WebLogic Server 内核调优
• Web 应用程序调优
• JDBC 调优
• EJB/MDB 调优
• JMS 调优
• 应用程序调优
• 超时调优
• 诊断性能问题
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
18
Web 应用程序调优JSP 和 Servlet 更改检测调优
• WLS 可以自动检测和重新加载发生更改的Servlets/JSP
• 检查 Servlet 重新加载的时间间隔 (servlet-reload-check-secs)
• 检测到更改时重新加载整个 Web 应用程序!
• 检查 JSP 页面的时间间隔 (pageCheckSeconds)
• 重新编译并重新加载 JSP 页面
• 默认行为
• 开发模式,每秒检查一次
• 生产模式,从不检查
• weblogic.xml 中的值会覆盖默认值• 从开发模式切换至生产模式时需谨慎
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
19
Web 应用程序调优JSP 编译调优
• 默认情况下,系统会按需编译 JSP 文件
• 会导致第一次访问时响应速度较慢
• 为了避免这种初始开销,可使用 WLS 工具在部署之前对 JSP 文件进行预编译。
通过以下命令行预编译 JSP
java weblogic.appc hrWeb.war
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
20
Web 应用程序调优JSP 编译调优(续)
• 可强制 WLS 永远不使用 JspClassServlet 查找JSP 源文件
• 预编译 JSP 文件
• 将 jsp 扩展映射至 JspClassServlet
• 不需要将 JSP 文件打包到 WAR 中
<servlet>
<servlet-name>JSPClassServlet</servlet-name>
<servlet-class>weblogic.servlet.JSPClassServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JSPClassServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
21
Web 应用程序调优JSP 和 Servlet 输出缓冲区调优
• 创建响应时的 Web 容器缓冲区输出
• 当缓冲区已满时,数据会立即刷新至客户端
• 数据发送至客户端之后不能再转发请求
• 相应地设置缓冲区大小
• ServletResponse.setBufferSize(int)
• <@page buffer=―64kb‖ @>
• WLS 的默认缓冲区大小是 12kb
• 避免在 ServletOutputStream 上调用 flush() 和close()
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
22
Web 应用程序调优HttpSession 复制调优
• WLS 仅复制会话的新属性/更改的属性
• 确保会话对象尽可能小
• 更适合存储大量属性,而非一个属性
• 仅在会话中放置可序列化的对象
• 操作失败将会阻止复制
• 监视整个集群中的主要负载分布
• 分布不均可能意味着负载平衡器/代理未正确分配负载
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
23
Web 应用程序调优HttpSession 复制调优(续)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
24
Web 应用程序调优HttpSession 复制调优(续)
• 确保现有会话的请求始终定向到承载主会话的服务器
• “获取”远程会话和移动辅助数据会显著影响性能
• WebLogic Web Server 插件提供了粘性路由
• 不需要在 Web 服务器前端建立 HWLB 粘性会话
• 如果未使用安装了 WL 插件的 Web 服务器,HWLB
会始终使用粘性会话
• 建议使用 Active Cookie Persistence
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
25
Web 应用程序调优Exalogic 会话复制优化
• 开启 Domain->Configuration->General 下的“ExalogicOptimizationsEnabled”标志
• 这会自动启用惰性反序列化
• 创建复制通道
• Environment->Servers-><服务器>->Protocols->Channels
• 启用该复制通道
• Cluster->Configuration->Replication
• 集群复制端口
• Environment->Servers-><服务器名称>->Configuration->Cluster
• 配置复制端口范围(例如: 8001-8010)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
26
Web 应用程序调优将 HTTP 会话分流至 Coherence*Web
• 如果内存中会话过多,那么 WLS 性能会受影响
• 请考虑使用 Coherence*Web 来处理用户数量较多、会话较大或会话超时较长的应用程序
• 将会话分流到数据网格中
• 增加网格中的 Coherence 节点的数量即可轻松实现扩展
• 允许跨应用程序共享会话
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
27
议题
• WebLogic Server 内核调优
• Web 应用程序调优
• JDBC 调优
• EJB/MDB 调优
• JMS 调优
• 应用程序调优
• 超时调优
• 诊断性能问题
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
28
JDBC 调优连接池大小调整
• 创建 DB 连接是一个非常耗时的过程• 理想情况下,设置为最小值 = 最大值,以避免按需创建连接
• 如果 DB 连接数受限,请将最小值设置为处理普通负载所需的连接数,将最大值设置为处理峰值负载所需的连接数,并启用池收缩
• 大多数应用程序在访问每个 DB 和处理每个并发请求时都只需要一个连接• 一般情况下,这意味着每个执行线程只需要一个连接。
• 可以考虑使用 <max-threads-constraint> 来防止系统争用数量有限的 DB 连接
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
29
JDBC 调优连接池大小调整(续)
• 在控制台中监视数据源统计数据• Active Connections High
Count
• Waiting on Connection
High Count
• Wait Seconds High
Count
• 进行相应的调优• 最大容量
• 连接预留超时(默认值:10 秒)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
30
JDBC 调优语句缓存调优
• WLS 会缓存 JDBC 语句对象
• 缓存依各个连接而定• 缓存的语句数量 = 连接数
* 缓存大小
• 根据命中率进行调优• WLS 控制台
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
31
JDBC 调优语句缓存调优(续)
• 数据库还会缓存经过分析的 SQL 语句
• Oracle DB 会将 SQL 缓存在共享池中
• SQL 缓存可跨所有连接共享
• 请与您的 DBA 共同优化SQL 的数据库分析
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
32
JDBC 调优Exalogic 优化
• 支持 SDP 的 JDBC 瘦型驱动程序
• JDBC URL:请将“(PROTOCOL = TCP)”替换为“(PROTOCOL = SDP)”
• 需要具有以下配置的 Oracle DB (Exadata)
• 配置了 SDP 监听器 (listener.ora)
• 使用 ActiveGridlink 数据库,而不是多数据源
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
33
JDBC 调优杂项调优
• Connection Creation Retry Seconds(默认值 = 0)• 如果某数据源的数据库不可用,那么此选项设置为默认值 0 时
WLS 将无法启动!
• 设置为非零值可让服务器顺利启动并定期重试创建连接池
• Seconds to Trust Idle Pool Connection(默认值 = 10 秒)• 与 Test Connections On Reserve 共同发挥作用
• 可显著减少连接测试查询
• 请考虑 LLR for JTA 事务• 仅有利于涉及多种资源的 XA 事务
• Last Logging Resource(非 XA)必须是数据库
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
34
JDBC 调优杂项调优(续)
• Remove Infected Connections Enabled(默认值 = on)
• 用于清理应用程序用来访问底层物理连接对象的连接
• 在使用物理连接访问特定于驱动程序的扩展时,禁用该选项可提高性能
• 仅在安全状态下使用!
• 应用程序不会保留对 Connection、Statements 或 ResultSet
对象的引用
• 应用程序不会更改连接的状态
• 有效的数据库用户 ID
• 自动提交状态
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
35
议题
• WebLogic Server 内核调优
• Web 应用程序调优
• JDBC 调优
• EJB/MDB 调优
• JMS 调优
• 应用程序调优
• 超时调优
• 诊断性能问题
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
36
EJB 调优无状态会话 Beans
• 通常,默认值足以满足要求
• initial-beans-in-free-pool = 0
• max-beans-in-free-pool = 1000
• 在池中创建新实例会占用资源,因此当运行时占用资源过高时,可通过调优 initial-beans-in-
free-pool 来加以改善
• 这会延长启动时间,不过可降低运行时资源占用
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
37
EJB 调优无状态会话 Beans
• 根据池丢失率进行调优
• 池丢失率 = (池总错失数/池总访问数) * 100
• 这些值以 MBeans 的形式存在(控制台、wlst、jmx)
• 较高的池丢失率表明缓冲池未经正确调优,因此无法在池中找到实例
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
38
EJB 调优无状态会话 Beans
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
39
EJB 调优MDB 调优
• 最大 MDB 并发数由以下因素决定:
• MDB 是否使用具有 max-threads-constraint 的自定义工作管理器?
• 是
• max-threads-constraint < max-beans-in-free-pool?
• 是:最大并发数 = max-threads-constraint
• 否:最大并发数 = max-beans-in-free-pool
• 否
• max-beans-in-free-pool > 16?
• 是:最大并发数 = 16
• 否:最大并发数 = max-beans-in-free-pool
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
40
EJB 调优MDB 调优(续)
• 要处理 MDB 中的错误,需采取以下措施:
• 对于事务交付,使用 setRollbackOnly() 强制消息返回源队列
• 对于非事务交付,抛出一个 RuntimeException 来防止消息确认。
• EJB 规范要求销毁 MDB 实例
• 使用 weblogic.ejb.NonDestructiveRuntimeException 防止 WLS 销毁 MDB 实例
• 使用外部 JMS 服务器处理远程目标
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
41
议题
• WebLogic Server 内核调优
• Web 应用程序调优
• JDBC 调优
• EJB/MDB 调优
• JMS 调优
• 应用程序调优
• 超时调优
• 诊断性能问题
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
46
JMS 调优应用程序间消息传递模式
生产应用程序
消费应用程序
概念模式
生产应用程序
SAF
消费应用程序
推模式
生产应用程序
消费应用程序
拉模式
当您可控制消费应用程序时,请优先使用拉模式,因为这种模式更加简单高效
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
47
JMS 调优了解 JMS 事务
• JMS 支持两种事务类型
• 事务性会话 — 仅涉及单一 JMS 会话上的 JMS 操作的本地事务
• JTA 事务 — 可包含其他事务性(例如 XA)资源的全局 JTA 事务
• 事务性会话与 JTA 事务互斥
• JTA 事务必须使用 createSession (false, …)
• 事务内部发送的消息会在提交时确认
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
48
JMS 调优选择一种持久存储类型
• WebLogic Server 支持两种类型的持久消息存储
• 文件存储
• 数据库存储
• 文件存储通常更快
• 数据库存储通常更易于确保高可用性
• JMS 存储必须具备故障切换所需的高可用性
• 文件存储共享磁盘(例如 SAN)
• 数据库存储可访问数据库
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
49
JMS 调优JMS 包装器
• WLS JMS 包装器提供以下特性:• JMS 连接、会话和生产者池化功能
• 测试/重建 JMS 连接
• 针对 XA 提供程序的自动事务登记
• 用法:• 使用以下方式将连接工厂及目标映射至应用程序:
• 部署描述符中的 <resource-ref> 条目或
• 使用带有依赖注入的 @Resource 批注
• 使用正常方法编写 JMS 代码来发送消息:• 为各请求创建新连接、会话和生产者
• 在各请求结束时关闭对象
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
50
JMS 调优JMS 检查表
• 使用者必须在一段较长的时间内跟上生产者的步调
• 避免集群内消息路由,以实现最佳性能和可伸缩性
• 使用 JMS 包装器在服务器端应用程序中发送消息
• 优先使用异步使用者
• 对于在 WLS 服务器中运行的消费者,请使用 MDB
• 对于独立消费者,请使用消息监听器
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
51
议题
• WebLogic Server 内核调优
• Web 应用程序调优
• JDBC 调优
• EJB/MDB 调优
• JMS 调优
• 应用程序调优
• 超时调优
• 诊断性能问题
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
54
应用程序调优应用程序性能问题
• 大多数应用程序性能问题都通常与争用相关:
• 过度使用同步
• 资源不足(例如,数据库连接)
• 后端系统过载
• 负载测试可识别大多数争用
• 定期执行线程转储(5 到 10 秒)
• 关联分析器,例如 JRockit Mission Control 或Yourkit
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
55
应用程序调优通过编码优化性能
• 缓存 JNDI InitialContext、Data Source、JMS
Connection Factory 和 Destination 对象
• 使用 Service Locator 模式缓存查找数据,或者
• 使用依赖注入
• 使用 Coherence 缓存常用数据
• 可显式地在您的应用程序中使用
• 可用作 JPA Level 2 缓存
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
56
议题
• WebLogic Server 内核调优
• Web 应用程序调优
• JDBC 调优
• EJB/MDB 调优
• JMS 调优
• 应用程序调优
• 超时调优
• 诊断性能问题
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
57
超时调优设置网络超时
• 设置适当的 CONNECT 和 READ 超时,以防止线程无限期挂起
• RMI — 使用 JNDI 时无默认超时值• 使用 JNDI InitialContext 属性设置连接超时值和读取超
时值
• weblogic.jndi.WLContext.REQUEST_TIMEOUT — 这是连接超时值
• weblogic.jndi.WLContext.RMI_TIMEOUT — 这是读取超时值
• 未来版本将使用:
• weblogic.jndi.WLContext.CONNECT_TIMEOUT
• weblogic.jndi.WLContext.RESPONSE_READ_TIMEOUT
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
58
超时调优设置网络超时(续)
• HTTP — 设置出站调用超时值
• 通过编程来设置• URLConnection.setConnectTimeout(int milliseconds)
• URLConnection.setReadTimeout(int milliseconds)
• 如果使用默认 weblogic.net.http 实现,则使用系统属性来设置默认值• -Dweblogic.http.client.defaultConnectTimeout=3000
• -Dweblogic.http.client.defaultReadTimeout=30000
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
59
超时调优设置网络超时(续)
• JDBC — 设置超时值,防止因服务器中的线程挂起而导致数据库问题
• 设置 Oracle Thin Driver 属性• oracle.net.CONNECT_TIMEOUT=3000
• oracle.jdbc.ReadTimeout=30000
• WebLogic 控制台
• 设置 Invocation Timeout Seconds 选项,避免受管服务器在物理上与网络断开;在这种情况下,管理服务器会尝试与其联系,从而导致线程无限期挂时• Domain Configuration General Advanced
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
60
超时调优RJVM 心跳调优
• RJVM — 两个 WebLogic 端点之间的逻辑、持久连接
• 可通过心跳来确定连接运行状况• 默认情况下,每隔 60 秒 (Period Length) 会发送一次心跳
• 默认情况下,4 次心跳丢失 (Idle Periods Until Timeout),连接就会宣布进入故障状态并关闭
• 默认情况下,检测到故障连接并尝试完成故障切换需要 240 秒的时间 (60*4)
• 若耗时太长,应调低此选项• Idle Periods Until Timeout 的最小值是 4
• 调低 Period Length
• Server Configuration Tuning Advanced
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
61
议题
• WebLogic Server 内核调优
• Web 应用程序调优
• JDBC 调优
• EJB/MDB 调优
• JMS 调优
• 应用程序调优
• 超时调优
• 诊断性能问题
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。 `
62
诊断性能问题线程转储
• 定期完成多次线程转储
• 线程转储的方式有多种
• kill -3 <pid>(最佳)
• jstack <pid> (Hotspot)
• jrcmd <pid> print_threads (JRockit)
• 在 Windows 上使用 Ctrl-Break 键(仅前台进程)
• Visual VM
• WLST
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
63
诊断性能问题线程转储(续)
• 使用 ThreadLogic 分析线程转储(请原谅我的植入广告)
• 它可以自动根据常用模式进行分析并提供建议
• 它可以通过在一段时间内“区分”多次线程转储来提供建议
• http://java.net/projects/threadlogic
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
64
诊断性能问题线程转储(续)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
65
诊断性能问题线程转储(续)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
66
诊断性能问题堆转储
• 产生性能问题的一个常见原因就是频繁、长时间的 GC
暂停• 可能由内存占用高或内存泄漏造成
• 堆转储是某一个时间点的内存快照
• 获取 HPROF 堆转储的一些方式:• jmap –dump:format=b,file=heapdump.hprof <pid> (Hotspot)
• jrcmd <pid> hprofdump filename=heapdump.hprof (JRockit)
• jextract corefile [zipfile] (IBM)
• 请先将以下内容添加到 JVM 选项中:
• -Xdump:system:defaults:request=exclusive+prepwalk
• -XX:+HeapDumpOnOutOfMemoryError
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
67
诊断性能问题堆转储(续)
• 分析 HPROF 堆转储的各种工具
• Eclipse Memory Analyzer Tool (MAT)
• Visual VM
• Java Heap Analysis Tool (JHAT)
• YourKit
• 这些工具可展现
• 堆由哪些对象构成
• 通过比较和“区分”堆转储来检测内存泄漏
• MAT 或许是最常用和最简单的工具
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
68
诊断性能问题堆转储(续)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
69
诊断性能问题堆转储(续)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
70
诊断性能问题网络性能故障排除
• 诊断和排除潜在网络问题的最佳方式是使用数据包捕获
• 捕获数据
• tcpdump (Unix)
• 确保输出到文件中
• tcpdump –i bond0 -w file.pcap
• Wireshark (Windows)
• 使用 Wireshark 以可视化的方式分析数据包捕获
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
71
诊断性能问题网络性能故障排除(续)
• tcptrace
• 一个简便的实用程序,可分析数据包捕获并以简明的格式提供各种统计数据,例如数据包丢失和重传
• 另有预构建的 Windows 二进制文件(使用 cygwin)
• Fiddler
• 极其实用的 Web Debugging HTTP 代理,可截获浏览器请求/响应
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
72
诊断性能问题网络性能故障排除(续)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
73
诊断性能问题网络性能故障排除(续)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
74
诊断性能问题网络性能故障排除(续)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
75
诊断性能问题其他实用的分析工具
• JRockit Mission Control
• OOTB Flight Recorder 的性能开销极低,可在生产环境中使用
• 分析 GC 行为、潜在延迟问题
• Visual VM
• YourKit
• AD4J
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
76
诊断性能问题其他实用的分析工具(续)
• 操作系统工具
• truss/strace — 跟踪系统调用。
• 可有效确定性能问题是否发生在最低级别
• top、ps、prstat、vmstat、mpstat、iostat、netstat
等 — 在系统级别监视性能。
• 可有效监视 CPU、磁盘 I/O、NFS 统计数据、网络 I/O、虚拟内存统计数据、处理器统计数据和进程统计数据(例如每个线程的 CPU 使用量)
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
77
问答
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。