Answers:
如@khedron所说,您可以在活动监视器中看到此信息。
如果您想在命令行中使用它,可以使用以下代码编写的Python脚本(或者可能是从别人的代码修改而来,我不记得了,它已经很老了),向您显示Wired,Active,Inactive和Free内存量:
#!/usr/bin/python
import subprocess
import re
# Get process info
ps = subprocess.Popen(['ps', '-caxm', '-orss,comm'], stdout=subprocess.PIPE).communicate()[0].decode()
vm = subprocess.Popen(['vm_stat'], stdout=subprocess.PIPE).communicate()[0].decode()
# Iterate processes
processLines = ps.split('\n')
sep = re.compile('[\s]+')
rssTotal = 0 # kB
for row in range(1,len(processLines)):
rowText = processLines[row].strip()
rowElements = sep.split(rowText)
try:
rss = float(rowElements[0]) * 1024
except:
rss = 0 # ignore...
rssTotal += rss
# Process vm_stat
vmLines = vm.split('\n')
sep = re.compile(':[\s]+')
vmStats = {}
for row in range(1,len(vmLines)-2):
rowText = vmLines[row].strip()
rowElements = sep.split(rowText)
vmStats[(rowElements[0])] = int(rowElements[1].strip('\.')) * 4096
print 'Wired Memory:\t\t%d MB' % ( vmStats["Pages wired down"]/1024/1024 )
print('Active Memory:\t\t%d MB' % ( vmStats["Pages active"]/1024/1024 ))
print('Inactive Memory:\t%d MB' % ( vmStats["Pages inactive"]/1024/1024 ))
print('Free Memory:\t\t%d MB' % ( vmStats["Pages free"]/1024/1024 ))
print('Real Mem Total (ps):\t%.3f MB' % ( rssTotal/1024/1024 ))
如您所见,vm_stat
尽管它以4kB页计,但您只能从命令行进行调用,因此脚本可以转换为MB。
该脚本还会计算所有正在运行的进程的“实际内存”使用情况以进行比较(这与总内存统计信息中的任何特定值都不匹配,因为内存是一个复杂的野兽)。
这是我的系统上脚本输出的示例:
[user@host:~] % memReport.py
Wired Memory: 1381 MB
Active Memory: 3053 MB
Inactive Memory: 727 MB
Free Memory: 1619 MB
Real Mem Total (ps): 3402.828 MB
(非常细致地调整以匹配StackExchange上的选项卡大小;)
ps -caxm -orss= | awk '{ sum += $1 } END { print "Resident Set Size: " sum/1024 " MiB" }'
您需要的命令vm_stat
-与传统的Unix工具类似,vmstat
但有一些MACH特定的差异。手册页写得很好。
看来它之所以缓慢,是因为top -l 1
刷新完成后总是延迟一秒钟,这是刷新之间的标准延迟。在命令中添加-s 0使其立即完成:
top -l 1 -s 0 | grep PhysMem
另外,为清楚起见,我喜欢在其行上显示每个mem组件,因此我在sed替换字符串中添加了9个空格以与'PhysMem:'对齐:
top -l 1 -s 0 | grep PhysMem | sed 's/, /\n /g'
vm_stat
。
top
要比调用慢得多,vm_stat
但top
提取的详细程度要低得多,单位是兆字节而不是页。至更不冗长换行符可以被移除并且awk
可以被替换为grep
导致top -l 1 | grep ^PhysMem
。
page
单元中产生结果/需要某种骇人听闻的后处理才能使所述单元可解释。
这是一个简单的方法,可以使整个vm_stat
输出更加人性化:
$ vm_stat | perl -ne '/page size of (\d+)/ and $size=$1; /Pages\s+([^:]+)[^\d]+(\d+)/ and printf("%-16s % 16.2f Mi\n", "$1:", $2 * $size / 1048576);'
free: 2330.23 Mi
active: 2948.07 Mi
inactive: 1462.97 Mi
speculative: 599.45 Mi
wired down: 840.46 Mi
copy-on-write: 43684.84 Mi
zero filled: 385865.48 Mi
reactivated: 608.14 Mi
如果您只对交换使用非常感兴趣(输出的最后一行是什么free
):
$ sysctl vm.swapusage
vm.swapusage: total = 64.00M used = 0.00M free = 64.00M (encrypted)
htop
#!/bin/bash
FREE_BLOCKS=$(vm_stat | grep free | awk '{ print $3 }' | sed 's/\.//')
INACTIVE_BLOCKS=$(vm_stat | grep inactive | awk '{ print $3 }' | sed 's/\.//')
SPECULATIVE_BLOCKS=$(vm_stat | grep speculative | awk '{ print $3 }' | sed 's/\.//')
FREE=$((($FREE_BLOCKS+SPECULATIVE_BLOCKS)*4096/1048576))
INACTIVE=$(($INACTIVE_BLOCKS*4096/1048576))
TOTAL=$((($FREE+$INACTIVE)))
echo Free: $FREE MB
echo Inactive: $INACTIVE MB
echo Total free: $TOTAL MB
free="$(( $(vm_stat | awk '/free/ {gsub(/\./, "", $3); print $3}') * 4096 / 1048576)) MiB free"
tcsh
(默认设置)或中sh
。该命令是否特定于Shell?
bash
和ksh
具体的。在tcsh
尝试:set freeblocks=`vm_stat | grep free | awk '{ print $3 }' | sed 's/\.//'` ; set freeMB=`expr $freeblocks \* 4096 / 1048576`; set free=`echo $freeMB MiB free`
。然后,您可以echo $free
打印可用内存量。您还可以创建一个别名:alias free echo $freeMB MiB free
。
没有与Mac OS X一起发布的完全等效的方法,但是还有其他几种获取信息的方法:
system_profiler
-在外壳中显示所有Mac的系统配置文件信息 sysctl -a | grep mem
或sysctl hw.memsize
(总内存)allmemory
如果要使用命令行工具报告非常详细的内存使用情况,则可以尝试使用该命令。
allmemory
可能会出乎意料的长-对于我来说,今天每次运行需要四分钟, YMMV。allmemory
for 的运行sysdiagnose
可能需要更长的时间。
上面的代码对我来说太费力了,并且假设您也已经完成了完整的安装...如果您是从Mac OS X启动盘启动的,则上述所有解决方案显然都行不通。 ..只需使用命令“ hostinfo”,这是我在2012年中运行Mavericks(10.9.1)的MBAir的输出:
Mach kernel version:
Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64
Kernel configured for up to 4 processors.
2 processors are physically available.
4 processors are logically available.
Processor type: i486 (Intel 80486)
Processors active: 0 1 2 3
Primary memory available: 8.00 gigabytes
Default processor set: 195 tasks, 961 threads, 4 processors
Load average: 1.61, Mach factor: 2.38
这个命令的好处是,它也预装了10.9安装程序/usr/bin
,因此非常方便,
理想情况下,如果只需要RAM,则发出:
$ hostinfo | grep memory
但是不知道hostinfo是否在以前的任何操作系统上都存在...
hostinfo
显示已用内存?
top -l 1 -s 0 | awk ' /Processes/ || /PhysMem/ || /Load Avg/{print}'
这应该做得很好:)
我认为这些天psutil
及其meminfo.py
脚本提供了最有用的内存使用细节。尝试一下:
pip install psutil
curl -O https://raw.githubusercontent.com/giampaolo/psutil/master/scripts/meminfo.py
python ./meminfo.py
它产生的输出如下所示:
MEMORY
------
Total : 16.0G
Available : 5.5G
Percent : 65.8
Used : 13.5G
Free : 1.5G
Active : 7.4G
Inactive : 4.0G
Wired : 2.1G
SWAP
----
Total : 1.0G
Used : 33.5M
Free : 990.5M
Percent : 3.3
Sin : 15.9G
Sout : 71.6M
请注意该Available
行,该行显示了在不交换的情况下实际有多少内存可用于启动新应用程序的估计 。
我不知道其他任何提供可用内存估计的MacOS实用程序。
为了进行比较:在Linux系统上,available
当前版本的输出中的列中提供了相同的信息free
:
total used free shared buff/cache available
Mem: 7.8G 552M 182M 156M 7.1G 6.9G
Swap: 0B 0B 0B
Total: 7.8G 552M 182M
输出中的该available
列free
仅来自MemAvailable
中/proc/meminfo
。在具有的系统上/proc/meminfo
,psutil也仅使用它来估计可用内存。
但MacOS的没有/proc/meminfo
,所以估计在这种情况下,可用内存, psutil采用Linux上用来计算相同的算法MemAvailable
进行/proc/meminfo
。
您可以尝试使用该memory_pressure
命令。查看我的系统的输出(i5,4 GB RAM)
The system has 2147483648 (524288 pages with a page size of 4096).
Stats:
Pages free: 90009
Pages purgeable: 139593
Pages purged: 7496548
Swap I/O:
Swapins: 470466
Swapouts: 530913
Page Q counts:
Pages active: 407739
Pages inactive: 148277
Pages speculative: 16200
Pages throttled: 0
Pages wired down: 263064
Compressor Stats:
Pages used by compressor: 122815
Pages decompressed: 7327420
Pages compressed: 17625795
File I/O:
Pageins: 1538997
Pageouts: 86692
System-wide memory free percentage: 63%
这是该帖子的第二次重发。起初,我有两个-1
。一种是因为我没有用英语描述,所以已将其更正。另一个因为我曾经使用过gawk
(这不是标准OS X安装的一部分),所以它也已得到纠正,我现在使用awk
。在-2
仍然存在;-)。现在最好的办法就是自己测试和评估命令?
我回顾了我的第一个想法,即仅通过友好且高度可配置的显示构建仅一个面向最终用户的命令,我做了两个:
free-like.sh
始终面向“最终用户”的脚本,具有更高的准确性,“友好的”和可配置的显示方式,但计算量和资源消耗却更多,
free-like-raw.sh
,现在是面向命令的开发人员,系统管理员等,具有较少的计算和资源消耗,但精度较低,显示的“友好”程度也较低。
从命令的结果中提取物理内存的数据vm_stat
(该结果以块大小返回)。转换产生的不精确性(以字节为单位)(number_of_blocks * block_size,计算的默认值)将在0 <块的大小之间。虚拟内存的数据来自top
命令。这里的不精确度与top
命令的参考单位相关联:千,兆,千兆。
使用awk
四舍五入的方面(相对于bc
)进行计算。awk
也比快bc
。您可以在此处查看测试脚本:http : //myblog.robert.sebille.name/article29.html#awk-bc
如果以free-like.sh为单位,并且以mega ou giga为单位显示,则可以查看命令的结果(以字节为单位)(默认),以千,兆或千兆为单位,带有x小数位。
这些脚本对于发布来说太长了,但是您可以在我的博客文章中找到它们:http : //myblog.robert.sebille.name/article29.html
本文为法文,但以英语显示了每个命令及其集成帮助(./free-like.sh -h
和./free-like-raw.sh -h
)的显示示例。这些帮助完全描述了命令。该文章还显示代码。
英语不是我的母语。如果有人要纠正集成帮助中的错误,欢迎他;)。
你的。
gawk
不是标准OS X安装的一部分。
这在我的$ PS1上运行:
https://github.com/vigo/dotfiles-universal/blob/master/prompts/free_memory
(Ruby版本:https : //github.com/vigo/dotfiles-universal/blob/master/prompts%2Ffree_memory.rb)
vm_stat
以千字节为单位显示。
下面的oneliner以兆字节显示:
paste <(vm_stat | awk 'NR>1' | grep -o ".*:") <(for i in $(vm_stat | awk 'NR>1' | tr -d '.' | awk '{print $NF}'); do perl -e "print $i/1024" | awk '{printf "%0.2f", $0}'; echo; done) | column -s: -t
返回值:
Pages free 11.06
Pages active 798.25
Pages inactive 776.03
Pages speculative 9.15
Pages throttled 0.00
Pages wired down 303.27
Pages purgeable 0.95
"Translation faults" 82172.66
Pages copy-on-write 11629.60
Pages zero filled 27685.41
Pages reactivated 1450.70
Pages purged 91.66
File-backed pages 430.20
Anonymous pages 1153.24
Pages stored in compressor 481.75
Pages occupied by compressor 149.91
Decompressions 1277.92
Compressions 1622.33
Pageins 13198.02
Pageouts 66.61
Swapins 54.34
Swapouts 90.63
如果需要,请在osx上使用fishshell以及fisher的包管理器。
我写了以下扩展名:https : //github.com/fisherman/free
这是osx的free命令的完整重做。自己看看
> free
total used free appmem wired compressed
Mem: 8.00Gb 6.65Gb 1.95Gb 2.87Gb 2.09Gb 1.86Gb
+/- Cache: 1.24Gb 1.87Gb
Swap(43%): 2048Mb 877Mb 1171Mb
Load Avg: 1.63 1.95 1.95