尽管我只打开一个文件,但打开文件太多(IOException)

时间:2018-08-27 14:10:28

标签: java spark-java

我的程序遇到麻烦。我的充当网络服务(基于spark框架)的java程序抛出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当然是一个实例变量。当我运行此应用程序并通过邮递员访问某些内容时,即使每个请求都需要sample.json文件中的数据,它仅调用一次“ if”块(因此,这确实是我所期望的,即应仅读取该文件一次)..但是不久之后,部署了该应用程序的服务器由于上述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)

0 个答案:

没有答案