linux上的MATLAB内存不足;“全部清除”;

linux上的MATLAB内存不足;“全部清除”;,matlab,memory,Matlab,Memory,本质上,我是在MATLAB上批处理一堆文件(~200) for i = 1:n, process(i); end 其中process(i)打开一个文件,读取它并将输出写入另一个文件。(我没有在这里发布有关过程的详细信息,因为它有数百行,我很乐意承认我不完全理解代码,因为我是从其他人那里获得的) 大约每隔十几个文件就会耗尽内存。当然,在Linux上,内存函数不可用,因此我们必须“手动”解决它。好的,我认为有一些内存泄漏,所以让我们在每次运行后发出一个清除所有,即 for i = 1:n, pro

本质上,我是在MATLAB上批处理一堆文件(~200)

for i = 1:n, process(i); end
其中
process(i)
打开一个文件,读取它并将输出写入另一个文件。(我没有在这里发布有关
过程的详细信息,因为它有数百行,我很乐意承认我不完全理解代码,因为我是从其他人那里获得的)

大约每隔十几个文件就会耗尽内存。当然,在Linux上,
内存
函数不可用,因此我们必须“手动”解决它。好的,我认为有一些内存泄漏,所以让我们在每次运行后发出一个
清除所有
,即

for i = 1:n, process(i); clear all; end

运气不好,这仍然是内存不足。在发生这种情况时,
who
说内存中只有两个小数组(这可能不是您希望的解决方案,但作为一种解决方法,您可以使用一个shell脚本,在对Matlab的多次调用中循环。

当您说“内存中只有两个小数组”时,您的意思是在调用方脚本的工作区中,还是在“进程”的工作区中?在我看来,发生的情况是您可能是正在删除一个“进程”需要保留在内存中的大文件,并且您的计算机已达到极限。您不应该运行for循环,而应该确定是哪个文件造成了问题,并查看是否可以单独在该文件上运行“进程”。这是在调用方脚本的工作区中。正确的是,
process
可能有一个l更大的工作空间,但当然可以单独处理每个文件(例如,在每次调用之间重新启动MATLAB),所以这不是问题所在。持久变量或类似的东西可能会导致此类问题。不确定如何隔离问题。您可以尝试
清除类
,这比只
清除所有对象
,更广泛,但即使这样也不会清除所有对象。在
进程
中是否有一行命令
mlock