近期,在一个项目中大量使用DWR,但是,在上线不了多久以后,就频繁出现死机问题。
经过多番排查(使用YourKit),终于将问题锁定在死锁问题上,并定位在DWR的org.directwebremoting.impl.DefaultScriptSessionManager.invalidate方法上。
经过Google,找到了官方的Bug跟踪:http://getahead.org/bugs/browse/DWR-60
根据官方的说法,此Bug将在2.0.rc4 版本里解决
于是下了一个最近的,2.1版本,但是恶梦继续着...
死锁问题依然存在,没有一点减缓的意思
于是尝试采纳Scott Rankin的意见:
这一修改,曾经让我安心过三天,但是恶梦,依然继续着...
问题已经出现近两个月了,一点头绪都没有...
在即将绝望之际,同事一次乱翻文件夹,突然打开了Tomcat/webapps/.../WEB-INF/lib
一个dwr.jar包孤零零地呆在那里,顿时,一个感觉从心里飞过。当即把这个dwr.jar删掉
一周过去了,两周过去了,终于迎来了我期望已久的稳定
原因:classpath中存在两个dwr.jar包,导致dwr在繁忙的时候会引用另一个,在上下文中存在两个实例对象。
在DWR中大量使用了同步,死锁就理所当然的啦。
经过多番排查(使用YourKit),终于将问题锁定在死锁问题上,并定位在DWR的org.directwebremoting.impl.DefaultScriptSessionManager.invalidate方法上。
经过Google,找到了官方的Bug跟踪:http://getahead.org/bugs/browse/DWR-60
根据官方的说法,此Bug将在2.0.rc4 版本里解决
于是下了一个最近的,2.1版本,但是恶梦继续着...
死锁问题依然存在,没有一点减缓的意思
于是尝试采纳Scott Rankin的意见:
这一修改,曾经让我安心过三天,但是恶梦,依然继续着...
问题已经出现近两个月了,一点头绪都没有...
在即将绝望之际,同事一次乱翻文件夹,突然打开了Tomcat/webapps/.../WEB-INF/lib
一个dwr.jar包孤零零地呆在那里,顿时,一个感觉从心里飞过。当即把这个dwr.jar删掉
一周过去了,两周过去了,终于迎来了我期望已久的稳定
原因:classpath中存在两个dwr.jar包,导致dwr在繁忙的时候会引用另一个,在上下文中存在两个实例对象。
在DWR中大量使用了同步,死锁就理所当然的啦。