powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Сообщения об возможных утечках памяти
10 сообщений из 10, страница 1 из 1
Сообщения об возможных утечках памяти
    #40052769
zhirnov.ilya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане, прошу Вас, помогите разобраться в проблеме:

У клиента, в логах апача томкат наблюдаю следующие проблемы:
Код: xml
1.
2.
3.
4.
5.
SEVERE: The web application [/phox] appears to have started a thread named [Thread-1095] but has failed to stop it. This is very likely to create a memory leak.
мар 11, 2021 2:23:59 PM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
SEVERE: The web application [/phox] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@54e7ee49]) and a value of type [org.dom4j.DocumentFactory] (value [org.dom4j.DocumentFactory@5a06e5c2]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
мар 11, 2021 2:23:59 PM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
S



Данные сообщения сопоставил со вторым логом, в котором пашется что делает программа и в результате нашёл что проблема может быть связана с объектом типа ThreadLocal. В одной из статей нашёл что при использовании этих объектов необходимо уничтожать их самостоятельно.

Вот код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public class Log4jThreadFilter extends Filter {
	
	@Override
	public int decide(LoggingEvent arg0) {
		if (loggingLevel.get() == null) {
			return NEUTRAL;
		} else {
			return arg0.getLevel().isGreaterOrEqual(loggingLevel.get()) ? NEUTRAL : DENY;
		}
	}
	
	public static void setLoggingLevel(Level level) {
		log.debug("Setting log level to " + level + " for thread " + Thread.currentThread().getName());
		loggingLevel.set(level);
	}
	
	public static void reset() {
		log.debug("Resetting log level for thread " + Thread.currentThread().getName());
		loggingLevel.set(null);
	}
	
	private static final ThreadLocal<Level> loggingLevel = new ThreadLocal<Level>();
	private static final Logger log = Logger.getLogger(Log4jThreadFilter.class);

}



Как вы считаете, данный код может приводить к утечкам?


Зы: заранее прошу прощения если вопрос не корректный поставил. Проблема в том что я вообще говоря программист на delphi и с данной задачей вынужден разбираться хотя, даже синтаксис java для меня плохо знаком, не говоря уж о глубоком понимании как работает сборщик мусора поэтому, пожалуйста, не надо ответов "читай мануал". За 1-2 дня профессионалом в java я всё равно не стану :)
...
Рейтинг: 0 / 0
Сообщения об возможных утечках памяти
    #40052775
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цель всех этих изысков какая?
Иметь разные уровни протоколирования для разных потоков? А зачем?
Зачем вообще вся эта фигня, если Log4J умеет "на лету" перечитывать и применять настройки?
...
Рейтинг: 0 / 0
Сообщения об возможных утечках памяти
    #40052776
zhirnov.ilya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,
понятия не имею какая цель. Я этот код вижу впервые. Пока мои исследования приводят к тому что надо заменить
Код: java
1.
loggingLevel.set(null);


на
Код: java
1.
loggingLevel.remove();



Как вы считаете, это решит проблему с памятью?
...
Рейтинг: 0 / 0
Сообщения об возможных утечках памяти
    #40052797
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя лог про одно, а исходник - про другое.
...
Рейтинг: 0 / 0
Сообщения об возможных утечках памяти
    #40052802
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Как нынче модно. Сам себе придумал задачу.
...
Рейтинг: 0 / 0
Сообщения об возможных утечках памяти
    #40052803
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zhirnov.ilya,

> я вообще говоря программист на delphi
= как в дельфи определяют утечку?
...
Рейтинг: 0 / 0
Сообщения об возможных утечках памяти
    #40052855
zhirnov.ilya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,
Там вообще просто: подключаешь компонент, который при закрытии приложения смотрит что осталось из объектов и сообщает сколько объектов какого класса висят в памяти

Но самое главное, в последнем delphi 10.4 нет никаких сборщиков. Программист сам следит за созданием и удалением объектов.
Это не очень удобно с точки зрения разработки, зато искать утечки по памяти в разы проще
...
Рейтинг: 0 / 0
Сообщения об возможных утечках памяти
    #40052859
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zhirnov.ilya,
Нет.
Нужно нажать 3 клавиши, открыть список процессов. И убедится что утечка есть.
Делай.
...
Рейтинг: 0 / 0
Сообщения об возможных утечках памяти
    #40052868
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zhirnov.ilya
PetroNotC Sharp,
Там вообще просто: подключаешь компонент, который при закрытии приложения смотрит что осталось из объектов и сообщает сколько объектов какого класса висят в памяти

Но самое главное, в последнем delphi 10.4 нет никаких сборщиков. Программист сам следит за созданием и удалением объектов.
Это не очень удобно с точки зрения разработки, зато искать утечки по памяти в разы проще


Я думаю что не существует формально точного определения утечек памяти в Java. Обычно об утечках говорят
когда приложение в течение ДЛИТЕЛЬНОГО времени демонстрирует неубывающее потребление памяти
без видимых на то причин. И фаза GC не оказывает влияния на это потребление. И финалом этого может
быть ошибка класса OutOfMemoryException.

Об утечках также говорят некоторые признаки в коде, наподобие:

Код: java
1.
2.
3.
4.
5.
public class Zhirnov {

  static Map fuckenCollection = new HashMap();

}



Но это еще не ошибка, хотя и повод поговорить. Когда эта коллекция будет очищена? Деструкция объекта Zhirnov
ее не очищает.

Вот у тебя в коде есть отсылка к DocumentFactory. Найди ее в коде. И разберись как она используется. И
почему веб-контейнер сообщает что "failed to remove it when the web application was stopped".
...
Рейтинг: 0 / 0
Сообщения об возможных утечках памяти
    #40052874
zhirnov.ilya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
maytonНайди ее в коде. И разберись как она используется.

Спасибо
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сообщения об возможных утечках памяти
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]