“Insufficient system resources…”错误是什么意思?

3
这个问题涉及到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 但我已经尝试添加编辑注册表来增加内核内存页大小,但没有帮助。我真正不理解的是,我见过使用50MB大块迁移文件的代码,而且我见过那些代码在一个块中处理超过1GB的文件。但是服务器陷入困境的文件只有32MB!这到底是怎么回事?这是FileChannel或Windows的问题吗?
1个回答

4

这可能与“Bug” ID 4938442:使用NIO FileChannels复制大文件时系统资源不足有关。

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

客户提交的解决方法:

  • 不要使用NIO;我们希望避免此解决方法,因为NIO在处理大文件时提供了显著的性能提升(至少在本地磁盘到本地磁盘复制时)。

  • 我们可以使用较小的字节数进行传输。在Windows XP和Windows 2000服务器上,可以复制的实际字节数似乎有所不同。当然,32Mb的值似乎有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接