Too many open files on tomcat server, tomcat 9

294
03 мая 2017, 09:02

Томкат работает с огромным количеством файлов.
Он открывает файл, берет всё его содержимое и записывает в String следующим образом:

Files.lines(Paths.get(path), Charset.forName("UTF-8")).reduce("", String::concat)

Файлов несколько сотен, а также, возможно, каждый открывается неоднократно. Увеличение лимитов количества открытых файлов через ulimit -n, прописывание в /etc/security/limits.conf и прочее мне не подходит: нет необходимости в том, чтобы было открыто огромное количество файлов сразу.

Вопрос: как мне "закрывать" файл сразу, как только его содержимое записывается в строку? У меня есть метод, выглядит он так:

    String getStringFromFile(String path){
            String answer = "";
            try {
                path = URLDecoder.decode(path, "UTF-8");
                answer = Files.lines(Paths.get(path), Charset.forName("UTF-8")).reduce("", String::concat);
            } catch (Exception e) {
               e.printStackTrace();
            }
            return answer;
    }

То есть сам файл меня не волнует вообще, мне нужно лишь его содержимое, которое после открытия записывается в строку - и всё. Как тут же закрывать файл, или как мне добиться того же результата (записи всего содержимого файла в одну строку), при этом, чтобы все файлы не накапливались открытыми?

Answer 1

Надо закрыть stream, который использует ресурсы ввода/вывода. Stream реализует AutoCloseable, можно воспользоваться try-with-resource:

...
try (Stream<String> stream = Files.lines(Paths.get(path), Charset.forName("UTF-8"))) {
    answer = stream.reduce("", String::concat);
}
...

Или самостоятельно закрывать вызовом stream.close()

READ ALSO
Как мне избежать ArrayIndexOutOfBounds?

Как мне избежать ArrayIndexOutOfBounds?

При попытке преобразовать массив строк на массив чисел бросается исключение ArrayIndexOutOfBounds ExceptionКак нужно избежать этого? Вот сам код:

239
Не генерирует из wsdl заглушки для клиента

Не генерирует из wsdl заглушки для клиента

Есть проблема - я написал веб сервис, клиент которого адекватно генерил заглушки, и каким то образом перестал это делатьНаписан сервер, рабочий...

330
Создание Servlet&#39;а

Создание Servlet'а

ПриветствуюПодскажите, почему второй вариант кода не принимает компилятор? В чем разница?

327