故障诊断学习工具:在实践中学习 WebSphere 应用服务器故障诊断
2010-07-19 00:00:00 来源:WEB开发网核心提示: 图 5. 代码编辑器查看原图(大图)这段代码主要完成如下操作:获取一个全局锁 locker1(Sleep(5000))获取一个全局锁 locker2释放全局锁 locker2释放全局锁 locker1获取一个全局锁 locker2(Sleep(5000))获取一个全局锁 locker1释放全局锁
图 5. 代码编辑器
查看原图(大图)
这段代码主要完成如下操作:
获取一个全局锁 locker1
(Sleep(5000))
获取一个全局锁 locker2
释放全局锁 locker2
释放全局锁 locker1
获取一个全局锁 locker2
(Sleep(5000))
获取一个全局锁 locker1
释放全局锁 locker1
释放全局锁 locker2
这段代码在单线程运行时可以很顺利的执行,但在多线程并发条件下却很容易发生死锁:当两个不同的线程分别执行到第 2 步和第 6 步之前时 , 其中的一个线程已经占用了 locker1, 它需要等待 locker2, 而另一个线程则刚好相反。 因此如果我们模拟多用户并发执行这段代码,就能够重现死锁问题。
模拟多用户并发
PDLT 内置了压力引擎,可以方便的模拟多用户并发调用的场景,如下图所示,展开动作面板下方的 Advanced Settings"面板,可以设置模拟客户端的个数,发送请求总数以及请求之间的间隔时间。这里我们将用户数设置为 2。返回动作面板并单击"DeadLock Jsp" 按钮,压力引擎会同时发送 2 个请求来调用"DeadLock Jsp" 按钮所对应 jsp,从而运行上面我们所编辑的代码。
图 6. 设置压力引擎
更多精彩
赞助商链接