【问题标题】:MATLAB out of memory on linux despite regular "clear all"尽管定期“全部清除”,Linux上的MATLAB内存不足
【发布时间】:2015-10-14 09:55:59
【问题描述】:

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

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

process(i) 打开一个文件,读取它并将输出写入另一个文件。 (我没有在此处发布有关 process 的详细信息,因为它有数百行长,而且我承认我并不完全理解代码,是从其他人那里获得的)。

这在每十几个文件之后就会耗尽内存。当然,在 Linux 上,memory 函数不可用,所以我们必须“手动”解决。好吧,我认为有一些内存泄漏,所以让我们在每次运行后发出clear all,即

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

不走运,这仍然会耗尽内存。在发生这种情况时,who 表示内存中只有两个小数组(

欢迎任何帮助我检测错误来自何处的想法。

【问题讨论】:

  • 当您说“内存中只有两个小数组”时,您是指在调用者脚本的工作区还是在“进程”的工作区?在我看来,正在发生的事情是您可能正在读取“进程”需要保存在内存中的大量文件,并且您的机器已达到极限。与其运行 for 循环,不如确定是哪个文件造成了问题,并查看是否可以单独在该文件上运行“进程”。
  • 这是在调用者脚本的工作区。你正确process 可以有更大的工作空间,但当然可以单独处理每个文件(例如,通过在每次调用之间重新启动 MATLAB),所以这不是问题。
  • 持久变量或类似的东西可能会导致此类问题。不确定如何隔离问题。
  • 你可以试试clear classes,它比clear all更普遍,但即使这样也不会清除像persistent variables这样的所有对象。
  • process 中的命令mlock 是否有一行?

标签: matlab memory


【解决方案1】:

这可能不是您所希望的解决方案,但作为一种解决方法,您可以使用一个循环多次调用 Matlab 的 shell 脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2014-05-18
    • 1970-01-01
    • 2014-12-13
    • 2019-04-06
    • 1970-01-01
    • 2015-05-23
    相关资源
    最近更新 更多