我怎么能监控MATLAB使用多少内存?

372(30天)
我有一个项目,是我希望监视内存密集型和MATLAB使用多少内存,如果超过一定阈值,我可以停止这个项目。

接受的答案

MathWorks支万博1manbetx持团队
不幸的是,没有一种方便的方法来监视内存使用MATLAB。然而,附加功能可以帮助监视内存使用作为一个解决方案。
函数的monitor_memory_whos。m的操作使用谁命令和评估它在基地的工作区。每个变量的内存使用情况总结,转换成字节。这个函数可以在后台运行不显示数据MATLAB命令提示符。然而,工作区并不是唯一的内存使用内存使用MATLAB。通常,程序启动使用大约500 MB的内存。
运行“monitor_memory_whos。米的MATLAB命令提示请输入以下函数:
一个=魔法(1000);
B =幻影(500);
C =峰(250);
in_use = monitor_memory_whos
记忆功能也可以用于监控内存使用Windows系统。在内存管理的更多信息,请参阅以下链接:
2的评论
凯文·格里森
凯文·格里森 2016年9月27日
简短的回答是:在工作区中MB,和价值观。
monitor_memory_whos。m依赖评估基本工作空间的“谁”功能。
试着在你的命令窗口执行“谁”。它显示在工作区中所有元素的字节。monitor_memory_whos脚本添加这些字节值和分裂2 ^ 20 MB的内存显示工作空间。

登录置评。

更多的答案(4)

1月
1月 2016年5月4日
注意“内存使用”并没有很好的定义。当代码让数组迭代生长,它请求新的记忆在每个迭代中:
v = [];
k = 1:1e6
v (k) =兰德;
结束
虽然最终数组使用8 mb, Matlab请求总和(1:1e6) * 8 = 500 gb的内存的操作系统。当然Matlab释放内存,但操作系统等待,直到找到时间来清理内存,用0覆盖它。因此即使这个可爱的循环可以排气RAM。但是你认为发布和没有清除内存作为“被Matlab”或不呢?
如果你同时打开很多文件在Matlab中,操作系统的内存缓存保留可以长到一个了不起的大小。这是由于Matlab,但记忆不属于taskmanager Matlab。Matlab图形卡也可以存储数据。
如果多个线程,例如 parfor ,访问数据高速缓存线路(通常是一个64字节大小的内存块),总性能大幅降低。这可能被视为“内存密集型任务”,尽管它只关注一个很小的内存块。
由于“内存使用”一样含糊不清的现代操作系统的处理器时间。
2的评论
沃尔特·罗伯森
沃尔特·罗伯森 2016年10月25日
MATLAB保持“小块”内存池 根据需要清洗。我不知道是否会重用相同的位置,或如果它使用一个循环的策略。

登录置评。


马克T
马克T 2017年7月18日
编辑:马克T 2018年5月30日
你好,这里是一个选择窗口似乎工作:
函数memory_kb = get_process_memory1(流程)
如果~ (“过程”,“var”)
过程=“Matlab.exe”;
结束
命令= sprintf (“tasklist nh / fi“imagename eq % s”、过程);
[状态,结果]= dos(命令);
结果= textscan(结果,' % s ');
结果m = {1} {5};
%处理分隔符-叹息…
%德国操作系统
local_dec_sep =”、“;
local_1000_sep =“。”;
i_1000 =找到(m = = local_1000_sep);
i_dec =找到(m = = local_dec_sep);
如果~ isempty (i_dec),
m_dec = m (i_dec + 1:结束);
m = m (1: i_dec-1);
其他的
m_dec =;
结束
m (i_1000) =;
m = [m“。”m_dec];
memory_kb = str2num (m);
您将需要开关”、“和”。对英语操作系统。可以很容易地升级到处理多个具有相同名称的过程。可惜在我的机器上需要100 ms……

Qifan
Qifan 2016年5月4日
任务管理器,显示内存使用过程部分。

塞缪尔·格雷
塞缪尔·格雷 2021年10月25日
编辑:沃尔特·罗伯森 2021年10月25日
“我有一个程序内存密集型和我想监视MATLAB使用多少内存,如果它超过一定阈值,我可以停止这个项目。”
尝试设置MATLAB工作区偏好,数组大小限制可能适用于作为控制。
尽管这将阻止脚本限制实际上是违反了之前,例如如果你告诉它创建NxM数组在脚本和给定类这需要说900 gb的ram系统< 900 gb的ram,数组大小限制活跃,不使用高数组等,Matlab将抛出一个异常,停止脚本没有实际创建数组。它将逐步增加现有的数组的大小,直到极限的威胁下一个要执行的指令。它将允许Matlab所使用的内存总量超过极限,虽然它可以裹着一试. .捕获循环为优雅的决议。这可能是功能解决方案很少需要额外的编码。
当然你可以编写一个测试自己和插入任何步骤之前,你觉得可能是一个问题。
如。
美林投资= 20,Nlim = 200;
M = 1, N = 1;
M * N = 50 e9 & & M & & <美林投资N < Nlim
一个=兰德(M, N);
M = M + 1, N = N + 1;
结束
不打算解决的问题中间行程的极限的计算,
像意味着(max (sum (a *)))
但至少它将是一个检查最后的结果……
如果你想检查中间计算,使用try - catch我循环并检查返回的错误
M = 1 e2;
n = 1:5;
N * N = 10 e6;
试一试,
m =意味着(max(总和(兰德(m, N) *兰德(N, m)))),
流(“成功! \ n”),
清晰的
我,
流(“失败! \ n”),我
结束;
暂停(1);
结束
…这是足以让我的系统处于困惑状态……它将可用内存到30 mb左右……在一个16 gb i5……
任务管理器(和使用它的过程)永远不会显示中间记忆水平触发失败因为触发所需的内存实际上不会习惯如果代码将违反限制在试图使用它。但如果不是,那么Matlab将愉快地执行代码…即使结果是,99.999%的可用ram使用……
命令不会失败,因为所需的触发记忆永远不会使用系统,所以它不会崩溃。MATLAB将屏幕潜在问题的代码和中止在实际执行这些代码之前。关键是保持状态的发生首先,但这并不是唯一的条件,是一个问题。任何较低的机器状态响应性是一个问题,除非你愿意去喝杯咖啡或什么的。MATLAB之前“改进”,它会高兴地创建请求的数组即使这意味着使用“磁盘记忆”(从swapfile ramdisk)相反的,你必须重新启动你的系统清理内存,让它回复……MATLAB系统实际上不会崩溃,只要有足够的“磁盘记忆”系统完成命令但可用非常缓慢的做任何事,你会想要崩溃。这就是为什么上面的限制是基于安装物理ram,不是“可用ram”。这仍然没有完全解决这个问题,因为它不会跟踪non-Matlab使用系统内存或“可用ram”(有或没有一个swapfile)。如果你有一个swapfile(或Win10喜欢称为“分页池”)然后你烤面包,因为操作系统甚至会愉快地交换应用程序和操作系统内存,磁盘以Matlab来释放内存。更“可靠的”,但它只是改变换出了什么操作系统,操作系统不是事实不得不求助于第一时间换出。理想的解决方案当然是意识到多少ram(代码和数据)一条指令需要完成之前要求MATLAB运行该命令,并简单地调整参数(和杀死任何不必要的后台应用程序)在调用指令之前,会在可用的内存空间。 Failing that, double the amount of ram in your system until this is no longer a problem. If it needs 6GB and you only have 4, going to 8 will solve the problem.
2的评论
塞缪尔·格雷
塞缪尔·格雷 2021年10月26日
我不知道,我认为这将适用于任何类型的数组,包括细胞和结构,除非他们是为了超过安装内存,喜欢高个子的数组或某种类型的数组是分布在许多工作站。
我们就叫这个好介绍应用程序内存管理。

登录置评。

MathWorks支万博1manbetx持

类别

找到更多的在性能和内存帮助中心文件交换

标签

s manbetx 845


释放

R14SP1

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!