“系统资源不足......”错误是什么意思?

时间:2010-05-18 17:23:03

标签: java windows nio ioexception file-copying

这个问题跨越了serverfault和stackoverflow,所以我选择了这个。

我使用一些简单的文件复制代码获得以下异常。它在Windows Server 2003 x64上运行

Caused by: java.io.IOException: Insufficient system resources exist to complete the requested service
at sun.nio.ch.FileDispatcher.pwrite0(Native Method)
at sun.nio.ch.FileDispatcher.pwrite(Unknown Source)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.write(Unknown Source)
at sun.nio.ch.FileChannelImpl.write(Unknown Source)
at sun.nio.ch.FileChannelImpl.transferFromFileChannel(Unknown Source)
at sun.nio.ch.FileChannelImpl.transferFrom(Unknown Source)
at Tools.copy(Tools.java:473)

public static void copy(FileChannel input, FileChannel output) throws IOException {
    final long size = input.size();
    long pos = 0;
    while (pos < size) {
        final long count = (size - pos) > FIFTY_MB ? FIFTY_MB : (size - pos);
        pos += output.transferFrom(input, pos, count);
    }
}

运行这段代码的服务器是全新且功能强大的,所以我不明白它可能耗尽的系统资源。

这看起来像这里描述的错误: http://support.microsoft.com/kb/304101

但是我已经尝试添加注册表编辑来增加内核内存页面大小,这没有帮助。

我真正没有得到的是我见过使用FileChannel transferFrom的代码,其中包含更大的50 MB块。我已经看到该代码适用于一个块中超过1 GB的文件。但服务器卡住的文件只有32 MB!

这里发生了什么?这是FileChannel还是Windows?

的问题

1 个答案:

答案 0 :(得分:4)

可能与"Bug" ID 4938442: Insufficient System Resources When Copying Large Files with NIO FileChannels有关。

  

评估:不是错误。这很可能是文件服务器(或可能是客户端)   配置问题。

     

CUSTOMER提交的解决方法:

     
      
  • 不要使用NIO;我们宁愿避免这种解决方法   NIO为大型文件提供了显着的性能提升   (至少在执行本地磁盘到本地磁盘副本时)

  •   
  • 我们可以使用较少的字节进行传输。该   可以在没有的情况下复制的实际字节数   在Windows XP和Windows XP上遇到此错误似乎有所不同   Windows 2000服务器。当然,32Mb的值似乎是   工作

  •