Слишком много открытых файлов (IOException), хотя я открываю только один файл

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

    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, конечно, является переменной экземпляра. когда я запускаю это приложение и нажимаю что-то через почтальона, он вызывает блок «если» только один раз, хотя для каждого запроса требуются данные из файла 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)

person SpaceyBot    schedule 27.08.2018    source источник
comment
где выбрасывается исключение?   -  person Lino    schedule 27.08.2018
comment
Пожалуйста, опубликуйте также трассировку стека   -  person RobAu    schedule 27.08.2018
comment
Причина проблемы в другом. В какой-то другой части вашей кодовой базы происходит утечка ресурсов.   -  person Stephen C    schedule 27.08.2018
comment
@Lino, я отредактировал сообщение с трассировкой стека.   -  person SpaceyBot    schedule 27.08.2018
comment
@StephenC, что странно, потому что у меня нет других операций с ресурсами во всем проекте.   -  person SpaceyBot    schedule 27.08.2018
comment
@RobAu, опубликовано, идея здесь состоит в том, чтобы прочитать файл (который не находится внутри JAR) только один раз (для первого запроса), а затем для последующего запроса он должен взять содержимое файла из jsonObject. на самом деле я не мог этого добиться, выбрасывая это исключение, но если я включу файл json в JAR, я не получу такого исключения. но я не могу сделать это так, так как json содержит данные пользователя и т. д.   -  person SpaceyBot    schedule 27.08.2018
comment
Возможно, это проблема Spark (config?)... stackoverflow.com/questions/25707629/   -  person RBH    schedule 27.08.2018
comment
@FaisalKhan - совсем не странно. Вы только что опубликовали трассировку стека, которая ясно показывает, что вы используете другой ресурс: сокет.   -  person Stephen C    schedule 28.08.2018