Загрузка файла сервлета
Я использую сервлет для загрузки нескольких файлов (используя 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
Поэтому попробуйте использовать последнюю доступную версию.