首页 / 软件开发 / JAVA / IBM的Java诊断,第3部分
IBM的Java诊断,第3部分2011-11-02 IBM Toby Corbin使用面向 Java 的 Lock Analyzer 诊断同步和锁问题减少锁的争用并提高性能简介:面向 Java™ 的 IBM® 锁分析器可从 alphaWorks 获得,可对运行中的 Java 应用 程序进行实时锁监视。锁争用会降低应用程序性能,该工具会突出显示发生锁争用的线程。开发人员可以 使用该信息修改其应用程序以减少锁争用,从而提高性能。 本文介绍了面向 Java 的 IBM 锁分析器,介 绍了其构建的基础架构并针对该工具的未来发展方向进行了思考。当今很多 Java 应用程序都通 过使用线程来利用该语言的功能,从而支持并发编程。很多线程可以共享相同的数据对象,但是如果应用 程序中控制线程的部分设计得不好,则您可能会遇到锁争用问题从而降低性能。例如,在多线程应用程序中,如果多个线程访问相同的资源进行读写访问, 则可能会出现线程同步问 题。如果一个线程尝试读取某个文件,而另一个线程 对其进行写访问,则可能会损坏数据。为了解决这 个问题,Java 语言允许一个线程获得对对象的专有锁, 从而防止其他任何线程访问它。一旦该线程完成 对该对象的处理之后,便释放该对象,以便 其他线程可以进行访问。但是,如果应用程序没有进行过精 心设计,则这种机制可能会导致更高级别的争用。如果一个锁正在使用中,而另一个线程尝试获取它,这时会发生锁争用。 如果锁被频繁获得和/或持 有时间较长,则可能会发生更高级别的争用。 更高级别的锁争用(很多线程尝试访问它)将成为系统中 的瓶颈, 因为每个运行的线程将暂停执行,直到它所需的锁变为可用为止, 这样便限制了应用程序的性 能。使用 JLA 防止出现锁问题面向 Java 的 IBM 锁分析器 (JLA) 是 alphaWorks 中的新工具,它可以 在运行 IBM 提供的 Java SDK 或 JRE 版本 5.0 或更高版本的的任何平台上运行, 对活动应用程序执行锁分析,以突出显示线程 的活动并且提供对锁争用频率的深入洞察。该视图可以帮助解决锁争用问题以及性能问题。JLA 一边运行现有的 Java 应用程序,一边收集该应用程序的所有锁信息。记录每个锁及其详细信息 ,如保持的时间、是否争用以及它阻塞线程尝试获得它的时间百分比。该工具由运行时库和前端图形用户 界面组成,前者必须在启动所要监视的应用程序时加载,后者可以显示结果和性能分析。JLA 设计详细信息JLA 由以下两个程序包组成:JLAagent。该程序包与平台有关,由特定于平台的库文件和一组打包成 JAR 的 Java 类组成,它提供 与 Java 虚拟机 (JVM) 的连接以收集有关运行的应用程序的锁统计信息。JLAGui。该程序包是使用 Swing 编写的,它与平台无关,提供图形用户界面。JLAagent 中的本地库是用 C 编写的并且使用 Java 虚拟机工具界面 ( Java Virtual Machine Tool Interface,JVM TI)。该界面提供方法控制在 JVM 中运行的应用程序的执行。通过该界面,您可以利用 IBM 发布的 JVM 中可用的功能收集线程统计信息。还可以通过对您要分析的 Java 应用程序的启动命令 进行修改,让 JVM 在启动时加载此本地库。然后本地库使用与它一起打包的 Java 类创建一个平台 MBean 服务器,该服务器提供允许 JLAGui 连接 JLAagent 的机制。启动 MBean 服务器之后, JLAGui 可以通过将该服务器导航到本地库中,然后导航到运行的 JVM 中 ,从而请求运行的应用程序的锁统计信息。由于 JLAagent 和 JLAGui 通过 MBeans 连接,因此它们没有 必要在同一机器上运行;JLAGui 还可以从网络上的任意位置连接到 MBean 服务器。