Весенний пакет не освобождает память (проблема с нехваткой памяти) - PullRequest
1 голос
/ 18 мая 2019

У меня весенняя пакетная загрузка, чтение из огромного XML-файла (2 ГБ), обработка и запись в Oracle oracle с помощью сохраняемого запроса Hibernate.Я использовал кусок 100 элементов для этого.Проблема в том, что когда я запускаю этот пакет на сервере, распределение памяти увеличивается до тех пор, пока процесс не будет завершен из-за «нехватки памяти» (я использовал команду top на сервере, и процесс использует память 20 ГБ!) .. я думаю, что дляпочему-то весна не освобождает память после окончания элементов чанка.Можете ли вы помочь мне понять, что случилось?

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Используете ли вы JAXB / JAXB2, чтобы случайно удалить данные XML?Если это так, проблема может быть связана с инициализацией JAXBContext в вашем методе, вместо того, чтобы инициализировать его один раз в вашем приложении.Инициализация JAXBContext - это дорогостоящая операция и частая причина утечек памяти.Более подробную информацию, связанную с этой проблемой, можно найти здесь.

Я использую Stax следующим образом:

public class ClassReader<T> extends StaxEventItemReader<T> {

    public MyClassReader(Class<T> t) {
        super();
        XStreamMarshaller unmarshaller = new XStreamMarshaller();

        HashMap<String, Object> aliases = new HashMap<String, Object>();
        aliases.put("RECORD", t);
        unmarshaller.setAliases(aliases);

        this.setFragmentRootElementName("RECORD");

        this.setUnmarshaller(unmarshaller);
    }
}

Не думаю, что это проблема ..

0 голосов
/ 18 мая 2019

Используете ли вы JAXB / JAXB2, чтобы случайно удалить данные XML?Если это так, проблема может быть связана с инициализацией JAXBContext в вашем методе, вместо того, чтобы инициализировать его один раз в вашем приложении.Инициализация JAXBContext является дорогостоящей операцией и частой причиной утечек памяти.Более подробную информацию, связанную с этой проблемой, можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...