我的程序遇到麻烦。我的充当网络服务(基于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)