每次重新启动应用程序时,ThreadPool编号都会增加,导致Tomcat中出现PermGen

时间:2013-07-18 23:03:37

标签: tomcat7 threadpool scheduler executorservice permgen

我正在使用一个池大小为1的SchedulerExecutorService,如下面的代码所示

private static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

并调用scheduleAtFixedRate方法

testConnectionHandle = scheduler.scheduleAtFixedRate(testConnection, DELAY, PERIOD, TimeUnit.SECONDS);

其中DELAY = 30且PERIOD = 60。

此SchedulerExecutorService在ServletContextListener的contextInitialized方法中启动。

我正在发送一条带有线程名称的日志消息,他第一次启动应用程序我名字是pool-1-thread-1,第二次我重新启动线程名称是pool-2- thread-1,第三次是pool-3-thread-1,第四次是我得到以下异常

SEVERE: WSSERVLET11: failed to parse runtime descriptor: java.lang.OutOfMemoryError: PermGen space

在listener的contextDestroyed方法中,我有以下代码

testConnectionHandle.cancel(true);
scheduler.shutdownNow();

我假设创建的线程池永远不会被破坏,也许我有内存泄漏问题。

我正在使用Tomcat 7.0.42

有人可以帮我解决这个问题吗?

0 个答案:

没有答案