用了2种定时器,但是都会有不同程度的导致客户端卡死
第一种,采用的timer
timer.scheduleAtFixedRate(retask, 5000, 60000);
间隔时间越短出现卡死的时间越早
第二种 是ScheduledExecutorService 
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();  
     service.scheduleAtFixedRate(retask, 10, 30, TimeUnit.SECONDS); 执行的retask 是这个RefreshTask 类: class RefreshTask extends TimerTask 
 { @Override
public void run() {
    isRunning = true;
    try {
      displayCurrentKeyWordInfoNoRuleByFilename();
} catch (Exception e) {
}
System.gc();
}
 }其中的 displayCurrentKeyWordInfoNoRuleByFilename 方法只是一个数据库的查询操作,目前搞不清楚到底是什么原因造成的。

解决方案 »

  1.   

    用sping 的定时器很方便的,目前没发现卡死现象
    注解@Scheduled
      

  2.   

    估计是你查的数据太多了吧,占据内存了,来不及清理。oracle加载数据多起来很容易挂掉
      

  3.   


    是的目前分析到的是,内存一直在不断增加,导致的 客户端进程卡死。。由于客户端有定时任务,每隔30秒会查询一次数据库,然后刷新客户端页面,但是会导致客户端的内存慢慢的增长,我通过调用gc 方法,也基本没什么效果,代码中将方法里面的变量最后都设置为null也不见有什么效果~~0.0  返回的数据是通过 org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor 远程调用返回的结果
      

  4.   

    是的目前分析到的是,内存一直在不断增加,导致的 客户端进程卡死。。由于客户端有定时任务,每隔30秒会查询一次数据库,然后刷新客户端页面,但是会导致客户端的内存慢慢的增长,我通过调用gc 方法,也基本没什么效果,代码中将方法里面的变量最后都设置为null也不见有什么效果~~0.0  返回的数据是通过 org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor 远程调用返回的结果
      

  5.   


    程序没问题,那重心放在应用服务器(如tomcat、apache等)内存配置上
      

  6.   


    是的目前分析到的是,内存一直在不断增加,导致的 客户端进程卡死。。由于客户端有定时任务,每隔30秒会查询一次数据库,然后刷新客户端页面,但是会导致客户端的内存慢慢的增长,我通过调用gc 方法,也基本没什么效果,代码中将方法里面的变量最后都设置为null也不见有什么效果~~0.0  返回的数据是通过 org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor 远程调用返回的结果如果是这样,可以试着把定时器查询出来的结果保存在内存Map中,然后客户端页面只要去取这个内存中的Map数据即可,这样即使有多个客户在使用,也只是直接从内存中取数据,不需要再去查一次,不会造成查询很多次导致内存溢出。
    单个定时器查询 内存是扛得住的。你的代码如果多个客户去用,应该就会导致每个人都会去查询一次,查询次数过多,卡死很正常。