内存耗尽:对于使用diff的大文件

问题描述 投票:8回答:2

我正在尝试使用两个大尺寸文件夹(~7GB)创建一个补丁。

我是这样做的:

$ diff -Naurbw . ../other-folder > file.patch

但也许由于文件大小,修补程序没有被创建并给出错误:

diff: memory exhausted

我尝试制作超过15 GB的空间,但问题仍然存在。有人可以帮我解决我应该使用的旗帜吗?

diff patch large-files
2个回答
16
投票

最近,当我需要区分两个大文件(每个> 5Gb)时,我也遇到了这个问题。

我尝试使用不同选项的'diff',但即使是--speed-large-files也没有效果。其他方法,如使用xdelta将文件拆分为较小的文件或按照this suggestion对文件进行排序也无济于事。我甚至得到了一个非常强大的VM(> 72Gb RAM),但仍然有这个memory exhausted错误。

我终于通过将以下参数添加到sysctl.confsudo vim /etc/sysctl.conf)来工作:

vm.overcommit_memory=1

vm.overcommit_memory有三个值(0,1,2)并设置内核虚拟内存记帐模式。来自proc(5) man page

0:启发式过度使用(这是默认值) 1:总是过度使用,永远不要检查 2:经常检查,永远不要过度使用

要确保参数确实已应用,您可以运行

sudo sysctl -p

完成后别忘了更改此参数!


1
投票

试试sdiff它是linux发行版中的预构建工具。

sdiff a.txt b.txt --output=c.txt

将显示要修改的文件。

这对我来说很完美.............

© www.soinside.com 2019 - 2024. All rights reserved.