В Linux я часто использую команду free , чтобы увидеть текущий объем свободной и используемой памяти в системе. Например:
$ free
total used free shared buffers cached
Mem: 7264256 1010952 6253304 0 371892 189088
-/+ buffers/cache: 449972 6814284
Swap: 8126456 28 8126428
Кажется, что он не существует, когда я вхожу free
в терминал Mac OS X. Есть ли альтернатива?
Как говорит @khedron , вы можете увидеть эту информацию в мониторе активности.
Если вы хотите это в командной строке, вот скрипт Python, который я написал (или, возможно, изменил чей-то другой, я не могу вспомнить, он уже довольно старый), чтобы показать вам количество проводной, активной, неактивной и свободной памяти:
#!/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
из командной строки, хотя это считается страницами размером 4 КБ, поэтому скрипт конвертирует в МБ.
Сценарий также подсчитывает использование «реальной памяти» всеми запущенными процессами для сравнения (это не будет соответствовать каким-либо конкретным значениям из общей статистики памяти, потому что память — сложный зверь).
Вот пример вывода скрипта в моей системе:
[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;)
Команда, которая вам нужна, vm_stat
аналогична традиционному инструменту Unix, vmstat
но с некоторыми отличиями, характерными для MACH. Страница руководства написана хорошо.
Кажется, причина его медленности в том, что top -l 1
после завершения всегда задерживается на одну секунду, стандартная задержка между обновлениями. Добавление -s 0 к команде делает ее завершенной мгновенно:
top -l 1 -s 0 | grep PhysMem
Кроме того, для ясности мне нравится показывать каждый mem-компонент на своей строке, поэтому я добавил 9 пробелов для выравнивания с 'PhysMem:' в строке замены sed:
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)
Существует терминальная команда, похожая free
на Mac OS X... она называетсяtop
Для получения дополнительной информации вы можете ознакомиться с этим документом службы поддержки Apple.
Mac OS X: как просмотреть использование памяти с помощью «верхней» утилиты
Вы можете попробовать memory_pressure
команду. См. вывод моей системы (i5, 4 ГБ ОЗУ)
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%
Нет точного эквивалента, который распространяется с Mac OS X, но есть несколько других способов получить информацию:
system_profiler
- Показывает всю информацию о системном профиле Mac в оболочке.sysctl -a | grep mem
или sysctl hw.memsize
(общая память)Просто возьмите решение от @zack и добавьте неактивные и спекулятивные блоки.
#!/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
. Является ли командная оболочка специфичной?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
.#!/bin/bash
top -l 1 | grep PhysMem: | awk '{print $10}'
Только для экспертов Unix:
top -l 1 | awk '/PhysMem:/ {print $10}'
top -l1 | awk '/PhysMem/ {print $2}'
на macos >= High SierraСудя по вашему другому вопросу , я думаю, вы нашли применение утилите Activity Monitor для просмотра состояния вашей памяти, верно? Для справки, он находится в /Applications/Utilities/Activity Monitor.app.
Вышеупомянутое слишком много усилий, на мой вкус, и предполагает, что у вас также есть полноценная установка ... Если вы загрузились с загрузочного диска Mac OS X, то все вышеперечисленные решения, очевидно, не будут работать. .. Просто используйте команду «hostinfo», вот вывод моего MBAir середины 2012 года, работающего с Mavericks (10.9.1):
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
, поэтому она очень удобна.
в идеале, если вам просто нужна оперативная память, выполните:
$ hostinfo | grep memory
Не знаю, существует ли hostinfo в каких-либо предыдущих ОС...
hostinfo
показать используемую память?Вы можете попробовать эту команду allmemory
, если вам нужен инструмент командной строки, который сообщает чрезвычайно подробное использование памяти.
allmemory
может быть неожиданно долгим — для меня сегодня более четырех минут за запуск, YMMV. Выполнение allmemory
for sysdiagnose
может занять значительно больше времени.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
.
Это второе переиздание этого поста. Сначала у меня было два -1
. Один, потому что я не описывал на английском языке, это исправлено. Другой, потому что я использовал gawk
(который не является частью стандартной установки OS X), он также исправлен, теперь я использую awk
. Они -2
все еще там ;-). Возможно, сейчас лучше всего протестировать и оценить сами команды?
Я рассмотрел свою первую идею создать только одну ориентированную на конечного пользователя команду с удобным и легко настраиваемым дисплеем, я сделал две:
free-like.sh
скрипт, всегда ориентированный на «конечного пользователя», с большей точностью, «дружественный» и настраиваемый дисплей, но с большим количеством вычислений и потреблением ресурсов,
free-like-raw.sh
, команда теперь ориентирована на разработчиков, системных администраторов и т. д., с меньшими вычислениями и потреблением ресурсов, но и с меньшей точностью, менее «дружественным» отображением.
Данные для физической памяти извлекаются из результатов выполнения команды vm_stat
(которая возвращает результаты в виде блоков). Неточность, возникающая в результате преобразования в байтах (число_блоков * размер_блока, значение по умолчанию для вычислений), будет находиться в пределах 0 < размера блока. Данные для виртуальной памяти берутся из top
команды. Неточность здесь связана с единицей измерения top
команды: килограмм, мега, гига.
Расчеты производятся с awk
округлением в этом отношении (в отличие от bc
). awk
также быстрее, чем bc
. Вы можете увидеть тестовый сценарий здесь: http://myblog.robert.sebille.name/article29.html#awk-bc
Вы можете просмотреть результаты команд в байтах (по умолчанию), в кило, мега или гига, с x десятичных знаков в случае free-like.sh и если вы зададите отображение в мега или гига.
Скрипты слишком длинные для поста, но вы можете найти их в этой статье моего блога: 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 )
Если вы используете fishshell на osx вместе с менеджером пакетов fisher.
Я написал следующее расширение: https://github.com/fisherman/free
Это полная переделка бесплатной команды для osx. Смотрите сами
> 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
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
top или htop также могут помочь решить проблему.
Мейерсон
дрфрогсплат
свод
ps -caxm -orss= | awk '{ sum += $1 } END { print "Resident Set Size: " sum/1024 " MiB" }'
Часто пекарц
дрфрогсплат
пользователь 292055
Йохан В. Дунон