`
江南孤鹰
  • 浏览: 55620 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

二级缓存(ehcache)在weblogic导致线程增长问题

 
阅读更多

最近项目中用到hibernate搭配ehcache做二级缓存。部署到weblogic,如果weblogic不挺下来。直接在weblogic console 中stop-->update-->start 做重新部署操作。用jconsole观察到Thread数量会随部署次数稳定增长。

 

研究了下ehcache。ehcache如果缓存到硬盘。对应每个table,ehcache都会起一对线程来维护这些table cache。一对如下线程:

    private final class SpoolAndExpiryThread extends Thread {

        public SpoolAndExpiryThread() {
            super("Store " + name + " Spool Thread");
            setDaemon(true);
            setPriority(Thread.NORM_PRIORITY);
            spoolAndExpiryThreadActive = true;
        }

        /**
         * RemoteDebugger thread method.
         */
        @Override
        public final void run() {
            spoolAndExpiryThreadMain();
        }
    }

 这些线程都设置为后台线程 setDeamon(true);

 

这些后台线程只有在把weblogic关了之后才会停下来,所以weblogic不重启,直接update war 然后start。ehcache会重新 new 很多新的线程。

 

这个问题不知道有什么解法

 

分享到:
评论
1 楼 rain2005 2009-12-30  
那你把SpoolAndExpiryThread重写一下不就可以了吗?把setDeamon(true);去掉,不过我不清楚这样会对ehcache什么样的后果。

刚才又看了下setDeamon,这样还是不行的,还是需要改启动SpoolAndExpiryThread线程的地方,如果SpoolAndExpiryThread isAlive()就不启动新的了。

相关推荐

Global site tag (gtag.js) - Google Analytics