![将大文件复制到远程服务器导致其耗尽物理内存](https://linux22.com/image/487615/%E5%B0%86%E5%A4%A7%E6%96%87%E4%BB%B6%E5%A4%8D%E5%88%B6%E5%88%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AF%BC%E8%87%B4%E5%85%B6%E8%80%97%E5%B0%BD%E7%89%A9%E7%90%86%E5%86%85%E5%AD%98.png)
我遇到了一个奇怪的问题,似乎是最近才出现的。
当我将一个大文件(大约 6GB)从我的笔记本电脑复制到我们的一个旧文件服务器时,该服务器几秒钟后内存就耗尽了。
这是最近才开始的,可能是从周二补丁日开始的,但我不确定。
该服务器是 Windows 2000 sp4 机器,它是一台配备 1GB 内存的戴尔 2950(注意:我确信该服务器的内存超过 1GB!我无法在今天结束前关闭它时进行物理检查)、3GHz Xeon 处理器、4 x 250Gb 7.5k RPM SATA 驱动器(组成 raid 10)和一个连接到英特尔托管交换机上 1GB 端口的 1 千兆位网卡。
(显然我无法发布图片,因此只能使用链接)
一旦我停止复制,内存就会立即释放:
我删除了杀毒软件,但没有任何影响。我已将“Microsoft 网络的文件和打印共享”选项更改为平衡。
我们还有另一台服务器,Windows 2000 SP4,配备 2GB Ram、2.8Ghz Intel 四核、6 x 300Gb 15k SAS(raid 10)。
当我在这里复制相同的 6GB 文件时,可用内存量不会改变。
服务器运行时我还能查看其他内容吗?由于服务器正在使用中,且不会受到小文件复制的影响,因此我暂时无法重新启动它。
这是我在服务器内存耗尽时打开的一些性能计数器的屏幕截图。
谢谢
Gareth
答案1
我遇到了同样的问题。
尝试在运行 Windows Server 2008 的 64 位服务器上进行 P2V 转换。由于文件系统缓存,VMDK 文件(44GB)的任何常规文件传输方法都会导致目标服务器上的 Windows 在几分钟后耗尽其 14GB RAM。
在 32 位服务器上运行 P2V 转换或文件复制不会出现此问题,并且内存使用量保持合理。
然后尝试将 VMDK 文件复制到目标 VMWare 服务器时出现同样的问题。
此页准确描述了我所看到的内容:
http://blogs.technet.com/askperf/archive/2007/05/08/slow-large-file-copy-issues.aspx
根据我的工作,AM ESEUtil 似乎是可行的方法。它没有我预期的那么快,但也没有让 Windows 感到惊慌。
Windows FTP 客户端在将文件移动到目标位置之前会使用 C:\ 上的临时文件。小心!:-)
这是非常令人沮丧。
答案2
我知道这有点麻烦,但你试过第三方文件复制实用程序吗?Windows 有时在文件复制方面有点笨/慢。Lifehacker 列出了这些实用程序的前 5 名,尝试其中之一,看看你是否仍然遇到同样的问题。
http://lifehacker.com/5280976/five-best-alternative-file-copiers
另外,就像 towo 所说的那样,检查您的虚拟内存设置。最佳做法是您的页面文件应为内存的 1.5 倍(即 1 GB 内存 = 1024 MB;1024*1.5 = 1536 MB 页面文件)
答案3
W2K 上的网络文件复制过程存在已知问题 - 如果远程系统清空写入缓存的速度不能快于文件数据通过网络到达的速度,那么如果文件足够大,它将稳定地消耗服务器上的所有物理内存。Mark Russinovich 详细介绍了这种情况可能发生的方式在本文中关于 Windows Vista 文件复制机制的更改。您发布的性能图看起来像是这个问题,我以前也见过这种行为,当时我的目标系统的磁盘速度很慢,而网络速度很快。
但是,即使您的目标操作系统有点旧,硬件也不是那么弱,并且带有 4x7.2K SATA 驱动器的 RAID 10 设置应该可以达到 60 到 120Meg/秒的写入速度,这比 Vista 报告的 39Meg/秒的副本写入速度要高得多。奇怪的是,如果它是一个稳定、配置良好的 GigE 链接,那么您可以达到 70Meg/秒(甚至更高)的网络传输速率,以持续复制这样的大文件。也就是说,如果有任何其他流量流入或流出客户端或服务器,或者(更可能)该速率主要受本地笔记本电脑硬盘速度的限制,则 38Meg/秒并不异常。
无论如何,我会检查您的 RAID 10 是否确实是健康的 - 这里的症状让我怀疑它无法以应有的速度写入。
答案4
也许您需要增强系统硬盘上的虚拟内存,因为硬盘空间不足可能会导致上述问题。
此外,从逻辑角度来看,服务器在从一个文件系统复制到另一个文件系统时实际上不需要将文件存储在内存中;它只是在文件经过的内存中分配一个缓冲区。不过,根据您复制文件的方式,某些应用程序会先将文件完全存储在内存中,然后再将其写入磁盘。
尝试使用像 FTP 这样的协议 - 如果仍然发生这种情况,您可能应该研究一些网络问题。
这里有趣的问题是服务器实际上如何存储文件 - 如您所见,I/O 负载下降很多,这意味着它实际上并没有将文件写入任何地方,只是将其缓冲在内存中。