Загрузка файла сервлета

Я использую сервлет для загрузки нескольких файлов (используя Apache Commons FileUpload). Часть моего кода размещена ниже. Моя проблема в том, что, если я загружаю файлы снова и снова, потребление памяти сервером приложений резко возрастает. Сервер Apache Tomcat, похоже, зависает в памяти и никогда не возвращает его. Кучи места не хватает памяти. Иногда не хватает памяти исключения и выбрасывает java heap space error,

Я закрыл все входные потоки, я думаю, что проблема в ServletFileUploadКто-нибудь может мне помочь, как закрыть его.

ServletContext context=this.getServletConfig().getServletContext();
DiskFileItemFactory factory = new DiskFileItemFactory();
FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(context);
factory.setFileCleaningTracker(fileCleaningTracker);

if (isMultiPart) {
    upload = new ServletFileUpload(factory);

    try {
        itr = upload.getItemIterator(request);
        while (itr.hasNext()) {

        item = itr.next();
        if (item.isFormField()) {
        ...

1 ответ

Вы используете FileCleaningTracker, есть версии Apache Commons FileUpload с ошибкой в ​​этом компоненте (см.: http://blog.novoj.net/2012/09/19/commons-file-upload-contains-a-severe-memory-leak/)

Кажется, это уже исправлено: https://issues.apache.org/jira/browse/FILEUPLOAD-189

Поэтому попробуйте использовать последнюю доступную версию.

Другие вопросы по тегам