WEB开发网
开发学院软件开发Java 故障诊断学习工具:在实践中学习 WebSphere 应用服... 阅读

故障诊断学习工具:在实践中学习 WebSphere 应用服务器故障诊断

 2010-07-19 00:00:00 来源:WEB开发网   
核心提示: 监控线程运行情况展开“Monitors”面板,可以看到 3 个 tab 页,故障诊断学习工具:在实践中学习 WebSphere 应用服务器故障诊断(6), 分别用来监控线程信息、内存和 cpu 使用情况以及请求的平均响应时间, 这里我们主要关心线程的运行情况,以及如何诊断

监控线程运行情况

展开“Monitors”面板,可以看到 3 个 tab 页, 分别用来监控线程信息、内存和 cpu 使用情况以及请求的平均响应时间。 这里我们主要关心线程的运行情况,从线程信息页我们可以看到刚刚运行的两个新的线程都处于“block”状态,并且这种状态会一直持续下去。 这就是死锁,它不但导致发生死锁的两个线程无法正常结束,这两个线程所占用的资源还会影响到更多的线程, 当线程总数超过 Web Container 线程池的最大线程数时,则所有的请求都会被拒绝。

图 7. 监控运行情况
故障诊断学习工具:在实践中学习 WebSphere 应用服务器故障诊断

察看正确代码

用鼠标右键单击 "Correct Jsp" 按钮,在快捷菜单中选择 "Edit Action Button",在弹出的 Java 编辑器中我们可以查看或者编辑这个按钮所执行的 Java 代码,其代码如下:

清单 2.“Correct Jsp” 按钮执行的 Java 代码

 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"); 
 } 
 } 

这段代码主要完成如下操作:

获取一个全局锁 locker1

(Sleep(5000))

获取一个全局锁 locker2

释放全局锁 locker2

释放全局锁 locker1

获取一个全局锁 locker1

(Sleep(5000))

获取一个全局锁 locker2

释放全局锁 locker2

释放全局锁 locker1

与 “DeadLock Jsp” 相比,我们在这段代码中仅仅调整了一下 locker1 和 locker2 的嵌套顺序,但当我们用两个(或者更多)客户端同时发出请求时,所有线程都能够正常结束。

因此,在多线程环境下,一定要保证锁的嵌套顺序是一致的,这样才能避免死锁的发生。

结束语

除了死锁问题之外,PDLT 还包含很多其他常见的典型问题,比如 Java 内存溢出、本地内存溢出、CPU 使用率过高、连接泄漏等。 对于这些常见的错误,用户最好在问题发生之前就对它进行了解,了解这些问题发生时系统的症状,以及如何诊断和解决这类问题。这样当真正的问题到来的时候才能迅速做出判断,从而减少由于系统中断而带来的损失。

上一页  1 2 3 4 5 6 

Tags:故障 诊断 学习

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接