ThreadLocal утечка памяти в Glassfish - PullRequest
2 голосов
/ 27 октября 2011

Будет ли ThreadLocal вызывать утечку памяти на сервере Glassfish, как это происходит в Tomcat?Зачем?http://wiki.apache.org/tomcat/MemoryLeakProtection

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Да, он протечет, и Glassfish даже не предупредит вас в соответствии с этой относительно недавней проблемой Glassfish JIRA:

http://java.net/jira/browse/GLASSFISH-14128

Однако необходимо сказать, что ThreadLocalспецифическая утечка не является «ошибкой» на серверах приложений / веб-сайтов как таковой, а связана с кодом в компонентах, работающих в этих контейнерах (независимо от того, являются ли эти компоненты сервлетами, сессионными компонентами и т. д.).В целом, веб-контейнеры пытаются защитить разработчика от написания большого количества кода обслуживания и сосредоточить его внимание на бизнес-логике.Однако с его стороны должно быть некоторое понимание того, как работает сервер приложений (пулы потоков, загрузчики классов, механизм развертывания / отмены развертывания, ...), чтобы такие вещи, как эта проблема ThreadLocal, выполнялись должным образом или избегались.Это не всегда легко, и это может быть очень сложно.Я помню, как читал о проблеме утечки памяти в Glassfish?связанные с использованием пользовательских уровней журнала.

Что делает Apache Tomcat, так это то, что он имеет вспомогательный механизм для предупреждения пользователя / устранения некоторых часто встречающихся проблем утечки памяти в пользовательском коде.Но даже по ссылке, приведенной в вопросе, вы можете прочитать, что не все возможные утечки памяти в ThreadLocal выполняются автоматически с использованием этого механизма.

Похоже, что Glassfish пока не имеет этой дополнительной функциональности.

0 голосов
/ 27 октября 2011

Эта проблема вызывает все виды проблем.Я уже писал об этом

Мне нужна помощь в поиске утечки памяти с помощью MAT

Мы вручную освобождаем объекты.Я думаю, что видел в списках ошибок GF, что это было исправлено в версии 3.1x.

...