Чи є у Mac OS X Terminal версія «вільної» команди в системах Linux?


194

У 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. Чи є альтернатива?

Відповіді:


92

Як говорить @khedron , цю інформацію ви можете побачити в " Моніторі діяльності".

Якщо ви хочете, щоб це було в командному рядку, ось сценарій Python, який я написав (або, можливо, модифікований з чужих, я не можу пригадати, він уже досить старий), щоб показати вам обсяг пам'яті Wired, Active, неактивний і вільний:

#!/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;)


який найкращий спосіб використовувати цей сценарій?
ідобер

2
не впевнений, що саме ви маєте на увазі ... скопіюйте та вставте його у новий файл, збережіть його десь (можливо, у / usr / local / bin), зробіть його виконуваним та запустіть?
drfrogsplat

Я думаю, що @idober пропонує вам включити приклад його запуску та отриманий результат (наприклад, захоплення екрана)
AJ.

@AJ, ах добре, зрозумів
drfrogsplat

6
лише мої 2 копійки:ps -caxm -orss= | awk '{ sum += $1 } END { print "Resident Set Size: " sum/1024 " MiB" }'
Сейф

70

Вам потрібна команда vm_stat- подібна до традиційного інструменту Unix, vmstatале з кількома специфічними різницями MACH. Сторінка man добре написана.


2
Що таке "сторінки"?
DilithiumMatrix

8
@zhermes - Найменша одиниця пам’яті, яка може використовуватися системою ... у випадку x86 та PPC Macs, це 4k. Сторінки вільні - це кількість вільних пам’ятів в 4 кб.
RI Swamp Yankee

2
Сторінки також є 4K в iOS.
smci

54

Здається, причина повільної полягає в тому, що top -l 1завжди затримується на секунду після завершення, стандартна затримка між оновленнями. Додавання до команди -s 0 робить її миттєвою завершенням:

top -l 1 -s 0 | grep PhysMem

Також для наочності мені подобається показувати кожен мем-компонент у його рядку, тому я додав 9 пробілів для вирівнювання з 'PhysMem:' у рядку заміни sed:

top -l 1 -s 0 | grep PhysMem | sed 's/, /\n         /g'

1
Це собака повільно, набагато краще утилізувати vm_stat.
мгдол

3
Так, запит topзначно повільніше, ніж дзвінки, vm_statале topвитяг набагато менший за багатослівний, а одиниця - мегабайт, а не сторінки. Для того, щоб бути ще менш детальним, перерви рядка можна видалити і awkзамінити, у grepрезультаті чого top -l 1 | grep ^PhysMem.
Штефан Шмідт

2
На всі речі, це найкраща відповідь. Це не дає результатів для недоброзичливих pageодиниць / не вимагає певного хакітного післяобробки, щоб зробити ці одиниці зрозумілими.
ійосеф

39

Ось простий одноразовий лайнер, щоб зробити весь 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

25

У випадку, якщо вас дійсно цікавить використання swap (який би був останній рядок виводу з free):

$ sysctl vm.swapusage
vm.swapusage: total = 64.00M  used = 0.00M  free = 64.00M  (encrypted)

я дуже багато шукав його :)
onalbi

20

Існує термінальна команда, подібна до freeMac OS X ... вона називаєтьсяtop

Для отримання додаткової інформації ви можете ознайомитися з цим документом підтримки Apple.

Mac OS X: Як переглянути використання пам'яті за допомогою "верхньої" утиліти


24
Строго кажучи, "top" на OS X, скоріше, більше схожий на команду Linux "top", звичайно :)
calum_b

6
краще, ніж верх:htop
nXqd

3
@nXqd htop: команда не знайдена
itsazzad

4
@SazzadTusharKhan встановіть htop, якщо у вас встановлено
пивоварення

2
Технічно вони зовсім не схожі, тому що безкоштовно друкує щось приємне та акуратне в командному рядку, тоді як верх - це те, що ви активно переглядаєте.
anon58192932

10

Просто взявши рішення від @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

9
#!/bin/bash
top -l 1 | grep PhysMem: | awk '{print $10}'

Тільки для експертів Unix:

top -l 1 | awk '/PhysMem:/ {print $10}'

1
Це більше не повертає жодного результату в сучасних macOS.
Метт Сефтон

використання top -l1 | awk '/PhysMem/ {print $2}'на macos> = Висока Сьєрра
JDS

Не повертає використану пам'ять
theillien

8
free="$(( $(vm_stat | awk '/free/ {gsub(/\./, "", $3); print $3}') * 4096 / 1048576)) MiB free"

1
Поточна редакція цієї команди не працює для мене 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.
jaume

7

Судячи з вашого іншого питання , я думаю, ви знайшли використання утиліти Monitor Monitor, щоб переглянути стан пам'яті, правда? Тільки для запису, це в / Applications / Utilities / Activity Monitor.app.


7

Немає точного еквівалента, який розподіляється з Mac OS X, але є кілька інших способів отримати інформацію:

  1. system_profiler - Показує всю інформацію про системний профіль Mac в оболонці
  2. sysctl -a | grep memабо sysctl hw.memsize(загальна пам'ять)

+1, працює з терміналу в режимі відновлення (cmd-r під час завантаження)
Стів Келет

7

Ви можете спробувати команду, allmemoryякщо хочете інструмент командного рядка, який повідомляє про надзвичайно детальне використання пам'яті.


1
Потужний інструмент, але він є досить процесорним (близько 95% одного з двох процесорів на моєму MacBookPro5,2), і якщо використовується багато пам'яті: простий запуск allmemoryможе бути несподівано довгим - для мене сьогодні, більше чотирьох хвилин на пробіг, YMMV. Пробіг allmemoryФОР sysdiagnoseможе зайняти значно більше часу.
Грем Перрін

6

Вище сказане - це занадто багато зусиль для мого вподобання, і передбачається, що у вас також є повноцінна установка ... Якщо ви завантажилися з диска для запуску Mac OS X, то всі вищезазначені рішення очевидно не спрацюють. .. Просто використовуйте команду "hostinfo", ось висновок з моєї середини 2012 року MBAir під управлінням 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

Не знаю, чи існує хостінфо на будь-яких попередніх ОС, хоча ...


4
Як hostinfoвідображається використана пам'ять?
nohillside

3
ця команда (принаймні тут, в ОС 10.6.8) показує лише фізично доступну пам’ять, але не скільки її використовується в даний час
MostlyHarmless

Це означає, що це насправді не відповідає на поставлене запитання, оскільки конкретно вказується, що він бажає "вільної та використовуваної пам'яті".
b4hand


3

Я думаю, що ці дні 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 .


3

Можна спробувати 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%

2

Bash команди "безкоштовно як" для Mac OSX.

Це друге перевидання цієї посади. Спочатку я отримав два -1. Один тому, що я не описував англійською мовою, це виправлено. Інший тому, що я використовував gawk(який не є частиною стандартної установки OS X), він також виправлений, я зараз використовую awk. Вони -2все ще є ;-). Найкраще, можливо, зараз тестувати та оцінювати команди самі?

Я переглянув свою першу ідею побудувати лише одну команду, орієнтовану на кінцевих користувачів, з дружньою та налаштованою дисплеєм, і зробив два:

  • free-like.sh сценарій завжди орієнтований на "кінцевого користувача", з більшою точністю, "доброзичливим" та налаштованим дисплеєм, але з більшою кількістю обчислень та витрачання ресурсів,

  • free-like-raw.sh, розробник, орієнтований на команду, системний адміністратор тощо., з меншими обчисленнями та витрачанням ресурсів, але також з меншою точністю, менш "дружнім" відображенням.

Дані для фізичної пам'яті витягуються з результатів команди vm_stat(яка повертає результати в розмірі блоків). Неточність, що виникає в результаті перетворення в байти (число_of_blocks * block_size, значення за замовчуванням обчислень), буде становити між 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.
nohillside

@patrix: Дякую за відгук. Я складу опис англійською мовою і теж перекладу інтегровану допомогу (зараз французькою). gawk: власне, я забув, дякую. Я познайомився з деякими проблемами локалізації (десятковою комою чи десятковою комою) з awk. Вони зникли, не знаючи чому. Я повернувся, щоб збудити замість gawk. Мені знадобилося трохи часу, щоб налагодити речі, я віддам репост, коли він буде готовий. Твій.
Роберт

1
Просто заміна gawk на awk працювала для мене без проблем.
nohillside

2

1
Відповіді на запитання різних повинні бути більше, ніж просто посилання. Добре включити посилання, але будь ласка, узагальнюйте або витягуйте його у відповіді. Ідея полягає в тому, щоб зробити відповідь самостійною.
nohillside

1

vm_stat показує вас у кілобайтах.

Наведений нижче ліній показує в мегабайтах:

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

1

Якщо ви використовуєте 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

Приємно. Одразу ж його подзвонили.
PeterVP

-1

top або htop також можуть допомогти вирішити проблему.


Ласкаво просимо попросити Різне. Надайте більше інформації про те, як команди, на які ви посилаєтесь, відповідають на питання.
tubedogg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.