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

说明: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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值