您的位置:首页 > 其它

程序在resin中运行时产生意外多条线程

2011-12-15 16:37 267 查看
说明:resin 用的版本是4.0的

由于需要程序运行时产生一条线程,对特定数据进行处理;

一直以来都运行得很正常,除了程序因为BUG太多缘故,运行一段时间后就会报内存溢出错误,

一直没找到真正原因,因此,经常得过段时间就要重启resin

某天突然发现数据被重复处理了,生成了重复的记录,时间点完全一样;

因为这些数据在处理时会进行排重处理

因此,按照程序的正常处理逻辑是不可能有重复数据的,并且时间点是一样的,

检查了很多遍相关代码就是看不出哪里会出问题

重启resin后,这种现象就又没有了,有段时间,重复数据特别多,

可能隔1,2天就又会出现这种情况,进行代码调试也调试不出有这种情况

最后通过跟踪resin处理日志和程序日志,发现当出现这种情况时,数据被重复生成了,

相关日志信息都打印了二次,就好像这个线程突然会分身术变成了二个一模一样的线程了;

但是又想不出是什么情况下才会让线程突然分身成2条。

在网上找了很久资料,都没找到有人说有这种情况;

后来无意间看到一张贴子,说的是resin覆盖class的时候,会重新读web.xml

而我的线程是放在容器的ini方法里产生的。

public class ContainerListen implements ServletContextListener {

public void contextDestroyed(ServletContextEvent sce) {

}

public void contextInitialized(ServletContextEvent sce) {

//开启 实时线程

new SSThread();

}

}

对照产生重复记录的日期,发现产生重复记录时我都有修改程序,因为知道resin会自动加载修改的类,

所以修改类传到服务器时都没有重启resin,悬了几个月的问题终于解决了。哎!

参考:http://topic.csdn.net/t/20040628/13/3128123.html

/blockquote
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐