powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Утечка памяти, о чем говорит mat?
18 сообщений из 18, страница 1 из 1
Утечка памяти, о чем говорит mat?
    #39231377
AK1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tomcat8 периодически падает из-за нехватки памяти. Сделали хипдамп, посмотрели через mat. Вот что показало

Код: sql
1.
2.
3.
4.
5.
The classloader/component "org.apache.catalina.loader.WebappClassLoader @ 0xf5e66210" occupies 5 381 480 (13,09%) bytes. The memory is accumulated in one instance of "java.util.concurrent.ConcurrentHashMap$Node[]" loaded by "<system class loader>".

Keywords
java.util.concurrent.ConcurrentHashMap$Node[]
org.apache.catalina.loader.WebappClassLoader @ 0xf5e66210




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
6 814 instances of "java.lang.Class", loaded by "<system class loader>" occupy 7 255 232 (17,65%) bytes.

Biggest instances:

class java.beans.ThreadGroupContext @ 0xf61e3618 - 1 968 472 (4,79%) bytes.


Keywords
java.lang.Class



кто может пояснить причины возникновения и подсказать пути решения?
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231394
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам надо узнать что держит класслоадер. Там если не ошибаюсь есть view который называется потенциальные проблемы. Ну и плюс посмотрите gc roots скорее всего все прояснится. Если куча небольшая, можете выложить тут и мы посмотрим.
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231401
AK1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник, дамп http://rgho.st/8C5wD7zmz, попробую поставить на гласфише или другой версии томката.
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231461
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://rsdn.ru/forum/java/5974292.1
Там в коментах ещё ссылка на хороший доклад по теме. Я бы посмотрел дамп, но сейчас не могу.
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231512
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AK1988Tomcat8 периодически падает из-за нехватки памяти. Сделали хипдамп, посмотрели через mat.

Нет утечки памяти и слова "хипдамп". Есть нехватка памяти, а не утечка. Очевидно, Tomcat-у не так задан размер кучи, или выражаясь по-вашему, heap-а. А именно, в настройках JVM для Tomvat-а, параметр JAVA_OPTS, или задано -Xms40m или такое (слишком маленькое) значение первоначального размера heap-а явно не задано и выделяется автоматически (пропорционально объёму памяти в ПК). То есть, оно оказалось в 40 МБ, а нужно задавать больше (в зависимости от программ от 256 МБ до значения -Xmx). Но если Tomcat установлен как служба, то значения могут быть взяты из JvmOptions файла установки службы service.bat, например:
--JvmMs 128 --JvmMx 256
(здесь значения в мегабайтах)

Какое именно значение используется, можно посмотреть такой программой, как jconsole. Также использование памяти (менее подробно, но в данном случае достаточно) показывается программой Tomcat Manager в пункте Server Status. Предыдущий ответ не имеет отношения к теме.
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231518
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Утечка ресурсов, в том числе и памяти - вполне могут быть. IMHO & AFAIK
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231538
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M
Плюсуюсь. При памяти в 40 Mb, подозревать утечку как-то странно.

При том, что большая часть памяти съедена самим Tomcat'ом + либами и, если я правильно понял, приложение всего-то занимает меньше пол-мегабайта.
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231549
AK1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поставил гласфиш, так же падает. Это так пробный проект на такой вот vds http://ru.hetzner.com/hosting/produkte_vserver/cx10 (1gb ram)
Включаю через скрипт, правда при падении томката не создается хипдамп, может с правами что не правильно, 1 пользователь - рут, для томката отдельно пользователя не создавал хз зачем он нужен если от рута запуск.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#!/bin/bash
export CATALINA_HOME=/opt/tomcat8
export JAVA_OPTS="-Xms256M -Xmx256M -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat8/dumps -Dfile.encoding=UTF-8";
PATH=/sbin:/bin:/usr/sbin:/usr/bin
start() {
 sh $CATALINA_HOME/bin/startup.sh
}
stop() {
 sh $CATALINA_HOME/bin/shutdown.sh
}
case $1 in
 start|stop) $1;;
 restart) stop; start;;
 *) echo "Run as $0 &lt;start|stop|restart&gt;"; exit 1;;
esac



catalina.out - томкат видит 256мб
http://pastebin.ubuntu.com/16300185/

лог после OutOfMemory - показывает 512
http://pastebin.ubuntu.com/16300237/

Может еще что в логах важное не замечаю? Сейчас еще посмотрю через jvisual и нужно попробовать увеличить память за счет swap.
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231551
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 178913280 bytes for committing reserved memory.
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit

В 1.8 java-писатели, что-то с Non Heap memory больно намутили. Раньше был Heap и PermGen, сейчас это поменяли. Аналогичная хрен была при попытке поставить на 1Gb AWS (Amazon) инстанс, лично я не разбирался, просто на AWS инстанс добавил своп.

Хотя, конечно лучше со всеми ключиками-памяти разобраться.
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231558
AK1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

там ssd, поставил swap 2gb - vm.swappiness=10 vm.vfs_cache_pressure = 50, посмотрим что будет, теперь за jvisual.
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231617
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AK1988Tomcat8 периодически падает из-за нехватки памяти. Сделали хипдамп, посмотрели через mat. Вот что показало
...

кто может пояснить причины возникновения и подсказать пути решения?

Нет, в Java утечек памяти нет!
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231618
AK1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

сделав пару раз deploy и undeploy от некоторых классов нет остаточных объектов, например,

ProductDaoImpl
http://rgho.st/8z22RRZmH.view

,а от части классов остаются не удаленные объекты, например

RoleToUserProfileConverter
http://rgho.st/7wk6y7zjv.view

жму на не удаленный объект, затем "Show Nearest GC Root" - все показывают одну строку
http://rgho.st/7ngG7jTSL.view

AbandonedConnectionCleanupThread.

Добавил в конфиг томката classesToInitialize
Код: sql
1.
2.
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"
          classesToInitialize="com.mysql.jdbc.NonRegisteringDriver" />


Объект остается. Добавил лиснер

Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
public class ContextFinalizer implements ServletContextListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(ContextFinalizer.class);

    public void contextInitialized(ServletContextEvent sce) {
    }

    public void contextDestroyed(ServletContextEvent sce) {
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        Driver d = null;
        while(drivers.hasMoreElements()) {
            try {
                d = drivers.nextElement();
                DriverManager.deregisterDriver(d);
                LOGGER.warn(String.format("Driver %s deregistered", d));
            } catch (SQLException ex) {
                LOGGER.warn(String.format("Error deregistering driver %s", d), ex);
            }
        }
//        Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
//        Thread[] threadArray = threadSet.toArray(new Thread[threadSet.size()]);
//        for(Thread t:threadArray) {
//            if(t.getName().contains("Abandoned connection cleanup thread")) {
//                synchronized(t) {
//                    t.stop(); //don't complain, it works
//                }
//            }
//        }
        try {
            AbandonedConnectionCleanupThread.shutdown();
        } catch (InterruptedException e) {
            LOGGER.warn("SEVERE problem cleaning up: " + e.getMessage());
            e.printStackTrace();
        }
    }

}


Объект остается.

Blazkowicz, как чинили?
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231627
AK1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если добавить фильтр или без добавления фильтра убрать из папки webapp/lib mysqlconnector, а оставить mysqlconnector только в ($TOMCAT_HOME)/lib, то gc уперается в AppContext
http://rgho.st/7yd2jhN2b.view
хз, что дальше?
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231629
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231634
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AK1988Если добавить фильтр или без добавления фильтра убрать из папки webapp/lib mysqlconnectorВозьмите за правило, что "глобальные" вещи должны быть исключительно в ${catalina.base}/lib. Библиотеки логирования и jdbc-драйверы - "безусловно глобальные".
Практически это означает, что в WEB-INF/lib (WEB-INF/classes) должно быть только то, что обязано находиться только там, а из того, что не обязано - только то, что:
а) является вашим кодом;
б) часто меняется;

Из всего этого так же следует, что настройкой среды для запуска сайта должен заниматься системный администратор хоста.
Если сайтов более одного - сисадмин обязан использовать раздельные catalina.base для каждого.
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231638
AK1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

спасибо! сейчас со свопом держится, если упадет, добавлю overcommit, но все-таки интересно решить проблему с редеплоем.
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231644
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ленитесь корректно реализовывать методы init() / destroy() для каждого (своего) сервлета.
С методом init(), в общем-то, понятно - любая инициализация должна быть там и только там, а не в (упаси боже) статических блоках, например.
Метод destroy(), в свою очередь, должен устанавливать глобальный нестатический флаг завершения, который (в логически определённых местах) должны проверять методы service() и do_XXXX(). Желательно, чтобы destroy() отслеживал процесс завершения рабочих потоков.
...
Рейтинг: 0 / 0
Утечка памяти, о чем говорит mat?
    #39231722
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот тут много полезной инфы - http://java.jiderhamn.se/2012/03/04/classloader-leaks-vi-this-means-war-leak-prevention-library/

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


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