代码之家  ›  专栏  ›  技术社区  ›  Pyrolistical

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

  •  3
  • Pyrolistical  · 技术社区  · 15 年前

    这个问题跨越了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块。我已经看到代码在一个块中对超过1GB的文件有效。但是服务器被卡住的文件只有32MB!

    这是怎么回事?这是一个问题吗 文件通道 还是窗户?

    1 回复  |  直到 15 年前
        1
  •  4
  •   polygenelubricants    15 年前

    它可能与 "Bug" ID 4938442: Insufficient System Resources When Copying Large Files with NIO FileChannels .

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

    客户提交的解决方案:

    • 不要使用NIO;因为 NIO为大型文件提供了显著的性能提升 (至少在执行本地磁盘到本地磁盘拷贝时)

    • 我们可以使用较小的字节数进行传输。这个 可以复制的实际字节数 在Windows XP和 Windows 2000服务器。当然,32MB的值 工作。