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

这个问题跨越serverfault和stackoverflow,所以我只是select了这一个。

我得到了一些简单的文件复制代码的例外。 它在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

但我已经尝试添加registry编辑来增加内核内存页面大小,并没有帮助。

我真的没有得到的是我看到使用FileChannel transferFrom代码与50 MB的很多大块。 我已经看到,代码工作的文件超过1 GB在一个块。 但是服务器卡住的文件只有32 MB!

这里发生了什么? 这是FileChannel或Windows的问题吗?

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

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

客户提交的解决方法:

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

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