这个问题跨越了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?
答案 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的值似乎是 工作