这个问题涉及 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 的问题吗?