Board logo

标题: 使用 Problem Diagnostics Lab Toolkit 增强故障排除技能(3) [打印本页]

作者: look_w    时间: 2018-8-13 21:40     标题: 使用 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                和 lock2 的嵌套顺序。然而,当并发请求被发送给该页面时,所有线程将正常终止。因此,在一个多线程环境中,您必须确保使用正确的嵌套锁顺序,从而避免产生死锁。
结束语本文解释了 Problem Diagnostics Lab Toolkit 如何帮助诊断一个线程死锁问题。除了死锁以外,PDTK 还帮助诊断其他一些常见的问题,比如内存泄漏、CPU 过度使用、JVM 崩溃等等。通过提供一个使您能够体验常见问题场景的环境,PDTK 可以帮助您通过模拟真实情形来增强问题诊断技能。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0