Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Сообщения об возможных утечках памяти / 10 сообщений из 10, страница 1 из 1
12.03.2021, 05:49
    #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
12.03.2021, 06:51
    #40052775
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщения об возможных утечках памяти
Цель всех этих изысков какая?
Иметь разные уровни протоколирования для разных потоков? А зачем?
Зачем вообще вся эта фигня, если Log4J умеет "на лету" перечитывать и применять настройки?
...
Рейтинг: 0 / 0
12.03.2021, 07:07
    #40052776
zhirnov.ilya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщения об возможных утечках памяти
Basil A. Sidorov,
понятия не имею какая цель. Я этот код вижу впервые. Пока мои исследования приводят к тому что надо заменить
Код: java
1.
loggingLevel.set(null);


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



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

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

Но самое главное, в последнем delphi 10.4 нет никаких сборщиков. Программист сам следит за созданием и удалением объектов.
Это не очень удобно с точки зрения разработки, зато искать утечки по памяти в разы проще
...
Рейтинг: 0 / 0
12.03.2021, 12:35
    #40052859
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщения об возможных утечках памяти
zhirnov.ilya,
Нет.
Нужно нажать 3 клавиши, открыть список процессов. И убедится что утечка есть.
Делай.
...
Рейтинг: 0 / 0
12.03.2021, 12:52
    #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
12.03.2021, 13:06
    #40052874
zhirnov.ilya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщения об возможных утечках памяти
mayton,
maytonНайди ее в коде. И разберись как она используется.

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


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