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

pri*_*tam 8 diff patch large-files

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

我是这样做的:

$ diff -Naurbw . ../other-folder > file.patch
Run Code Online (Sandbox Code Playgroud)

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

diff: memory exhausted
Run Code Online (Sandbox Code Playgroud)

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

Igo*_*gor 16

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

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

我终于通过向sysctl.conf(sudo vim /etc/sysctl.conf)添加以下参数来工作:

vm.overcommit_memory=1
Run Code Online (Sandbox Code Playgroud)

vm.overcommit_memory有三个值(0,1,2)并设置内核虚拟内存记帐模式.从proc(5)手册页:

0:启发式过度使用(这是默认值)
1:总是过度使用,从不检查
2:始终检查,永不过度使用

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

sudo sysctl -p
Run Code Online (Sandbox Code Playgroud)

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