Слишком много открытых файлов (IOException), хотя я открываю только один файл - PullRequest
0 голосов
/ 27 августа 2018

У меня проблема с моей программой. моя java-программа, которая работает как веб-сервис (построенный на платформе spark), генерирует исключение IOException под названием «Слишком много открытых файлов», хотя я использую только один файл в моем приложении и использую try-with-resource, который в конечном итоге закроет файл .. это немного кода, где я получаю доступ к файлу:

    public synchronized JSONObject read() {
    if (jsonObject == null) {
        LOGGER.info("Reading a json file");
        String line = "";
        final StringBuilder sb = new StringBuilder();
        try (FileReader fr = new FileReader("..path../sample.json");
                BufferedReader br = new BufferedReader(fr)) {
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
        } catch (IOException e) {
            LOGGER.info(e.getMessage());
        }
        jsonObject = new JSONObject(sb.toString());
    }
    return jsonObject;
}

здесь, jsonObject, конечно, переменная экземпляра. когда я запускаю это приложение и нажимаю что-то через почтальона, он вызывает блок if только один раз, даже если каждый запрос требует данных из файла sample.json (так что это действительно то, что я ожидал, то есть должен читать только файл) один раз) .. но через некоторое время мой сервер, на котором было развернуто это приложение, выходит из строя с вышеупомянутым IOException. Я много занимался серфингом, но все равно не нашел решения.

РЕДАКТИРОВАНИЕ:

Это трассировка стека:

  [qtp1477164349-12-acceptor-0@5ef8508f-ServerConnector@503fa520{HTTP/1.1,[http/1.1]}{0.0.0.0:4567}] WARN org.eclipse.jetty.server.AbstractConnector -
java.io.IOException: Too many open files
        at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
        at org.eclipse.jetty.server.ServerConnector.accept(ServerConnector.java:379)
        at org.eclipse.jetty.server.AbstractConnector$Acceptor.run(AbstractConnector.java:638)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)
        at java.lang.Thread.run(Thread.java:748)
...