我从2004年得到了Matlab的一个副本(忘记了版本号是什么,但它肯定是旧的),我可以使用"features“命令来查看Matlab有多少内存可用。在Matlab2010b中,这个命令不再适用于我,我应该怎么做才能看到可用的内存?谢谢。
我尝试了@Rasman建议的"memory“命令,但是得到了以下错误:
???使用==>内存函数内存的错误在此平台上不可用。
我正在运行Mac 64位的Matlab 2010 b。
发布于 2011-05-09 07:06:40
在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,得到与Activity一致的值(您必须在“空闲”中添加“投机性”才能得到确切的一致)。如果您只需要可用的内存,可以使用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可以消耗掉所有的空闲内存(更多,但如果你开始大量交换,它会慢很多)。我的一个系统有22 of,使用所有这些都没有问题。如果使用32位MATLAB,则限制在2Gb以内。
要查看总内存,可以将'free'+'active'+inactive'+'speculative'+'wired‘与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'),但我避免使用,因为我不可避免地在不同的计算机上有不同的版本。
发布于 2011-05-09 04:46:03
你试过内存吗?
https://stackoverflow.com/questions/5932598
复制相似问题