Существует ли в Mac OS X Terminal версия «свободной команды» в системах Linux?

В Linux я часто использую бесплатную команду, чтобы увидеть текущее количество свободной и используемой памяти в системе. Например:

$ 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. Есть ли альтернатива?

166 голосов | спросил hpy 24 32010vEurope/Moscow11bEurope/MoscowWed, 24 Nov 2010 00:08:40 +0300 2010, 00:08:40

21 ответ


81

Как сообщает @khedron , вы можете увидеть эту информацию в Activity Monitor.

Если вы хотите это в командной строке, вот скрипт 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 КБ, поэтому скрипт для преобразования в МБ.

Сценарий также подсчитывает использование «реальной памяти» всех запущенных процессов для сравнения (это не будет соответствовать каким-либо конкретным значениям из общей статистики памяти, поскольку память - это сложный зверь).


Вот пример вывода скрипта в моей системе:

[[email protected]:~] % 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;)

ответил drfrogsplat 24 32010vEurope/Moscow11bEurope/MoscowWed, 24 Nov 2010 05:18:40 +0300 2010, 05:18:40
56

Необходимая вам команда vm_stat - похожа на традиционный инструмент Unix vmstat, но с несколькими отличиями MACH. Страница руководства хорошо написана.

ответил RI Swamp Yankee 30 PMpMon, 30 Apr 2012 21:00:01 +040000Monday 2012, 21:00:01
37

Похоже, что причина медленная, потому что 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'
ответил linus 29 MarpmThu, 29 Mar 2012 21:48:55 +04002012-03-29T21:48:55+04:0009 2012, 21:48:55
28

Вот простой однострочный, чтобы сделать весь код 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
ответил Lloeki 18 J0000006Europe/Moscow 2013, 12:31:00
18

В Mac OS X есть команда терминала, похожая на free ... она называется top

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

Mac OS X: как просматривать использование памяти с помощью «верхней» утилиты

ответил z4mba 28 J000000Thursday11 2011, 21:43:34
17

Если вы действительно заинтересованы в использовании swap (какая бы последняя строка выводилась из free):

$ sysctl vm.swapusage
vm.swapusage: total = 64.00M  used = 0.00M  free = 64.00M  (encrypted)
ответил rymo 13 32013vEurope/Moscow11bEurope/MoscowWed, 13 Nov 2013 21:33:36 +0400 2013, 21:33:36
9

Просто выберите решение из @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
ответил bajceta 10 PMpTue, 10 Apr 2012 16:24:25 +040024Tuesday 2012, 16:24:25
9
#!/bin/bash
top -l 1 | grep PhysMem: | awk '{print $10}'

Только для экспертов Unix:

top -l 1 | awk '/PhysMem:/ {print $10}'
ответил Killinks 17 FebruaryEurope/MoscowbFri, 17 Feb 2012 15:18:14 +0400000000pmFri, 17 Feb 2012 15:18:14 +040012 2012, 15:18:14
7
free="$(( $(vm_stat | awk '/free/ {gsub(/\./, "", $3); print $3}') * 4096 / 1048576)) MiB free"
ответил Zack 28 J000000Thursday11 2011, 20:45:08
6

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

ответил Michael H. 24 32010vEurope/Moscow11bEurope/MoscowWed, 24 Nov 2010 01:43:04 +0300 2010, 01:43:04
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, поэтому это очень удобно,

в идеале, если вы просто хотите RAM, то выполните:

$ hostinfo | grep memory

Не знаю, существует ли hostinfo для любых предыдущих ОС, но ...

ответил hairbear... 28 Jam1000000amTue, 28 Jan 2014 04:18:15 +040014 2014, 04:18:15
6

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

ответил AlanGBaker 23 J000000Saturday11 2011, 03:50:56
5

Нет точного эквивалента, который распространяется с Mac OS X, но есть еще несколько способов получить информацию:

  1. system_profiler - Показывает всю информацию о системном профиле Mac в оболочке
  2. sysctl -a | grep mem или sysctl hw.memsize (total mem)
ответил TrinitronX 4 WedEurope/Moscow2013-12-04T04:13:49+04:00Europe/Moscow12bEurope/MoscowWed, 04 Dec 2013 04:13:49 +0400 2013, 04:13:49
4
top -l 1 -s 0 | awk ' /Processes/ || /PhysMem/ || /Load Avg/{print}'

Это должно сделать красиво:)

ответил Bijur Vallark 27 +03002015-10-27T08:33:24+03:00312015bEurope/MoscowTue, 27 Oct 2015 08:33:24 +0300 2015, 08:33:24
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%
ответил João Henrique 20 Mayam16 2016, 02:20:06
2

Команды Bash «бесплатно как» для Mac OSX.

Это второй переиздание этого сообщения. Сначала я получил два -1. Один, потому что я не описывал на английском, он исправляется. Другой, потому что я использовал gawk (который не входит в стандартную установку OS X), он также исправлен, теперь я использую awk. -2 все еще там ;-). Лучше всего, наверное, сейчас проверить и оценить команды сами?

Я рассмотрел свою первую идею о создании только одной ориентированной на конечных пользователя команды с дружественным и настраиваемым дисплеем, я сделал два:

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

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

Данные для физической памяти извлекаются из результатов команды vm_stat (которая возвращает результаты в блочном формате). Неточность, возникающая в результате преобразования в байтах (number_of_blocks * block_size, значение по умолчанию для вычислений) будет находиться между 0 <размер блока. Данные для виртуальной памяти берутся из команды top. Неточность здесь связана с единицей ссылки команды top: kilo, mega, giga.

Вычисления выполняются с использованием 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), на английском языке. Эти средства полностью описывают команды. В статье также отображаются коды.

Английский язык не мой. Если кто-то хочет исправлять ошибки в интегрированной помощи, он рад;).

ваши.

ответил Robert 12 Mayam13 2013, 00:54:37
2
ответил vigo 27 Jpm1000000pmFri, 27 Jan 2012 23:23:25 +040012 2012, 23:23:25
2

Я думаю, что в эти дни 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 .

ответил sideshowbarker 1 FebruaryEurope/MoscowbWed, 01 Feb 2017 16:41:10 +0300000000pmWed, 01 Feb 2017 16:41:10 +030017 2017, 16:41:10
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
ответил rubynorails 21 62015vEurope/Moscow11bEurope/MoscowSat, 21 Nov 2015 22:41:34 +0300 2015, 22:41:34
1

Если вы используете fishshell на osx, вместе с рыбаком его менеджер пакетов.

Я написал следующее расширение: 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
ответил Olivier Refalo 23 FriEurope/Moscow2016-12-23T01:41:40+03:00Europe/Moscow12bEurope/MoscowFri, 23 Dec 2016 01:41:40 +0300 2016, 01:41:40
-1

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

ответил Dai Kaixian 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 22 Sep 2016 05:42:12 +0300 2016, 05:42:12

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132