gpt4 book ai didi

macos - 如何在 Mac OSX 上检查 Matlab 2010b 或更高版本中的可用内存?

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:07 26 4
gpt4 key购买 nike

我有一个 2004 年的 Matlab 副本(忘记了版本号,但肯定是旧的),我可以使用“features memstat”命令查看 Matlab 可用的内存量。该命令在 Matlab 2010b 中不再适用于我,我应该如何查看可用内存?谢谢。

附言我按照@Rasman 的建议尝试了“内存”命令,但出现以下错误:

??? Error using ==> memory Function MEMORY is not available on this platform.

我正在为 Mac OS X 64 位运行 Matlab 2010b。

最佳答案

在 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 Monitor 一致的值(您必须将“推测”添加到“免费”以获得精确一致)。如果您只需要可用内存,可以使用 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 中的 'free'+'active'+inactive'+'speculative'+'wired' 相加(并乘以 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'),但我避免了,因为我不可避免地在不同的计算机上有不同的版本。

关于macos - 如何在 Mac OSX 上检查 Matlab 2010b 或更高版本中的可用内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5932598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com