首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Problem Diagnostics Lab Toolkit 增强故障排除技能(3)

使用 Problem Diagnostics Lab Toolkit 增强故障排除技能(3)

监视线程如图 7 所示,展开 Monitors 窗格会看到三个选项卡:Thread、Memory 和 ResponseTime。单击 Thread 选项卡获得线程的状态。从图 7 所示的线程信息可以看到,两个线程都处于阻塞状态。死锁意味着两个程序都不能通过编程的方式终止,而其他线程也就受到影响。当线程的总数超过 Web 容器的最大线程数时,那么所有新的请求都将被拒绝。
图 7. 监视线程状态查看正确的代码和 DeadLock JSP 一样,可以对 Corrected JSP 执行相同的操作;右键单击 Corrected Jsp 按钮并选择下拉菜单中的                Edit                Action。结果如清单 2 的 Java 代码所示。
启动 2. Correct Jsp 按钮执行的 Java 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
synchronized (lock1) { // lock1 is defined in the "Methods and Static Variables" tab
          Thread.sleep(5000);
          ThreadMonitor.registerThreadStatus("blocked");
          synchronized (lock2) {
          ThreadMonitor.registerThreadStatus("running");
         }
    }
synchronized (lock1) { // lock2 is defined in the "Methods and Static Variables" tab
          Thread.sleep(5000);
          ThreadMonitor.registerThreadStatus("blocked");
          synchronized (lock2) {
           ThreadMonitor.registerThreadStatus("running");
         }
    }




该代码执行下面的动作:
  • 获得一个全局锁:lock1。
  • 休眠 5 秒钟。
  • 获得另一个全局锁:lock2。
  • 释放全局锁:lock2。
  • 释放全局锁:lock1。
  • 获得一个全局锁:lock1。
  • 休眠 5 秒钟。
  • 获得一个全局锁:lock2。
  • 释放全局锁:lock2。
  • 释放全局锁:lock1。
与第一个列表的惟一不同之处是重新整理了 lock1                和 lock2 的嵌套顺序。然而,当并发请求被发送给该页面时,所有线程将正常终止。因此,在一个多线程环境中,您必须确保使用正确的嵌套锁顺序,从而避免产生死锁。
结束语本文解释了 Problem Diagnostics Lab Toolkit 如何帮助诊断一个线程死锁问题。除了死锁以外,PDTK 还帮助诊断其他一些常见的问题,比如内存泄漏、CPU 过度使用、JVM 崩溃等等。通过提供一个使您能够体验常见问题场景的环境,PDTK 可以帮助您通过模拟真实情形来增强问题诊断技能。
返回列表