Утечка памяти в веб-приложении Clojure - PullRequest
3 голосов
/ 17 марта 2011

Я создал веб-приложение в Clojure, упаковал его как WAR и развернул поверх Tomcat.Это работает, как я ожидаю, но когда я иду, чтобы закрыть Tomcat, я вижу много исключений, таких как:

SEVERE: The web application [] created a ThreadLocal with key of type 
[java.lang.ThreadLocal] (value [java.lang.ThreadLocal@fc5408]) and a value of type [clojure.lang.LockingTransaction] (value [clojure.lang.LockingTransaction@12db7c]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
Mar 17, 2011 4:19:48 AM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
SEVERE: The web application [] created a ThreadLocal with key of type [null] (value [clojure.lang.Var$1@11de914]) and a value of type [clojure.lang.Var.Frame] (value [clojure.lang.Var$Frame@7c28c]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
Mar 17, 2011 4:19:48 AM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
SEVERE: The web application [] created a ThreadLocal with key of type [null] (value [clojure.lang.Var$1@11de914]) and a value of type [clojure.lang.Var.Frame] (value [clojure.lang.Var$Frame@17588d5]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.

Я понимаю, что некоторые вещи, которые делает clojure, могут немного опередить мусор Javaколлекционер время от времени.В моей войне есть ServletContextListener, который запускает несколько фоновых потоков, но я не вижу причин, по которым они не должны просто изящно завершаться (в конце концов, они не являются демоническими потоками), когда контекст не развертывается.

Возможно, есть какой-нибудь лучший / другой способ, которым я должен использовать, чтобы начать свои темы, которые более дружественны к Tomcat?Прямо сейчас я только начинаю их называть (future (loop ....

1 Ответ

1 голос
/ 17 марта 2011

Очевидно, у Tomcat защита от утечки памяти - проверьте ссылку.

Я не думаю, что это на самом деле утечка памяти, скорее всего, Tomcat ревностно сообщаеттот факт, что некоторые потоки / threadlocal не были правильно закрыты / освобождены.

Предупреждение раздражает, но на самом деле это не фатальная проблема, поскольку вся локальная память потоков будет освобождена в любом случае, как только JVM завершит работу..)) в целом хорошо, но вы должны убедиться, что они действительно выходят в нужный момент.Это может означать что-то вроде "выключается?"атом, который вы можете проверить на каждом цикле.Вы можете обнаружить, что это удаляет предупреждение.

...