我从2004年获得了Matlab的副本(忘记版本号是什么,但它确实很旧),我可以使用“features memstat”命令来查看Matlab可用的内存量。在Matlab 2010b中,该命令不再适用于我,我该怎么做才能看到可用的内存?感谢。
P.S。我按照@Rasman的建议尝试了“memory”命令,但得到了以下错误:
???使用==>时出错记忆功能 MEMORY不适用于此 平台。
我正在为Mac OS X 64位运行Matlab 2010b。
答案 0 :(得分:13)
在Mac上的MATLAB中使用unix('vm_stat');
。这给出了例如:
Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free: 1580152.
Pages active: 184679.
Pages inactive: 64572.
Pages speculative: 63389.
Pages wired down: 203816.
"Translation faults": 3906655.
Pages copy-on-write: 301846.
Pages zero filled: 1899205.
Pages reactivated: 0.
Pageins: 107102.
Pageouts: 0.
Object cache: 15 hits of 32166 lookups (0% hit rate)
结果是4096字节的页面,因此将结果乘以4096并得到与活动监视器一致的值(您必须将'speculative'添加到'free'才能获得精确的协议)。如果您只想要可用内存,可以使用unix('vm_stat | grep free');
。如果你想要一个数字,你可以使用类似的东西:
[s,m]=unix('vm_stat | grep free');
spaces=strfind(m,' ');
str2num(m(spaces(end):end))*4096
编辑:回应下面的评论“它没有告诉你MATLAB用完了多少以及MATLAB可以使用多少。”以下是我为这个附加问题所做的工作。
根据我的经验,64位MATLAB可以耗尽所有可用内存(如果你开始交换太多,它会减慢很多)。我的一个系统有22Gb,使用所有这些都没有问题。如果您使用32位MATLAB,则限制为2Gb。
要查看总内存,您可以从vm_stat
添加'免费'+'有效'+无效'+'推测'+'有线'(并乘以4096)。或者,如果您只想要总内存,则可以使用unix('sysctl hw.memsize | cut -d: -f2')
(以字节为单位)。
要获得MATLAB使用的内存,需要稍微多一些。控制进程使用内存。如果您只使用unix('ps')
,则会获得matlab_helper
使用的内存。所以我用:
% get the parent process id
[s,ppid] = unix(['ps -p $PPID -l | ' awkCol('PPID') ]);
% get memory used by the parent process (resident set size)
[s,thisused] = unix(['ps -O rss -p ' strtrim(ppid) ' | awk ''NR>1 {print$2}'' ']);
% rss is in kB, convert to bytes
thisused = str2double(thisused)*1024
上面我使用了一个小awk
函数来选择一个命名列:
function theStr = awkCol(colname)
theStr = ['awk ''{ if(NR==1) for(i=1;i<=NF;i++) { if($i~/' colname '/) { colnum=i;break} } else print $colnum }'' '];
unix
命令的一个小教程来解释上述内容,以防它对任何人有帮助。 unix('command')
自己显示输出并返回状态。如果要处理输出,请使用[s,w] = unix('command')
并处理w
中的字符串输出。如果你想忽略s
输出,在MATLAB的更高版本中,你可以使用[~,w] = unix('command')
,但我避免这样做,因为我不可避免地在不同的计算机上有不同的版本。
答案 1 :(得分:-3)
你试过memory
吗?