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

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

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

这里发生了什么?这是FileChannelWindows 的问题吗?

4

1 回答 1

4

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

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

客户提交的解决方法:

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

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

于 2010-05-18T17:31:36.667 回答