Linux sistemlerinde “ücretsiz” komutunun Mac OS X Terminal sürümü var mı?


194

Linux'ta, sistemdeki mevcut boş ve kullanılan belleği görmek için sık sık free komutunu kullanıyorum . Örneğin:

$ free
             total       used       free     shared    buffers     cached
Mem:       7264256    1010952    6253304          0     371892     189088
-/+ buffers/cache:     449972    6814284
Swap:      8126456         28    8126428

freeMac OS X'in Terminaline girdiğimde görünmüyor . Bir alternatif var mı?

Yanıtlar:


92

@Khedron'un dediği gibi , bu bilgiyi Aktivite İzleyicisi'nde görebilirsiniz.

Komut satırında istiyorsanız, size Kablolu, Aktif, Aktif Değil ve Boş hafıza miktarlarını göstermek için yazdığım (veya belki başka birininkiyle değiştirilmiş, hatırlayamıyorum, şimdi oldukça eski):

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

Gördüğünüz gibi vm_stat, 4kB sayfalarda sayılmasına rağmen komut satırından çağrı yapabilirsiniz , dolayısıyla MB'ye dönüştürmek için komut dosyası.

Komut ayrıca, karşılaştırma için çalışan tüm işlemlerin "gerçek bellek" kullanımını da sayar (bu, genel bellek istatistiklerinden elde edilen belirli değerlerle eşleşmez, çünkü bellek karmaşık bir canavardır).


İşte sistemimdeki betiğin çıktısının bir örneği:

[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'teki sekme boyutlandırmasını eşleştirmek için çok az ayarlandı;)


bu betiği kullanmanın en iyi yolu nedir?
Iddober

2
tam olarak ne demek istediğinizi tam olarak bilmiyorsunuz ... kopyalayıp yeni bir dosyaya yapıştırın, bir yere kaydedin (/ usr / local / bin dizininde), çalıştırılabilir hale getirin ve çalıştırın?
drfrogsplat

Sanırım @idober onu çalıştırmanın bir örneğini ve üretilen çıktının (örneğin bir ekran yakalama)
AJ

@AJ, ah tamam, anladım
drfrogsplat

6
sadece 2 sentim:ps -caxm -orss= | awk '{ sum += $1 } END { print "Resident Set Size: " sum/1024 " MiB" }'
kasası

70

İhtiyacınız olan komut vm_stat- geleneksel Unix aracına benzer vmstatfakat MACH'e özgü farklılıklar. Erkek sayfası iyi yazılmış.


2
'Sayfalar' nedir?
DilithiumMatrix

8
@zhermes - Sistem tarafından kullanılan en küçük bellek birimi ... x86 ve PPC Mac'lerde, bu 4k. Sayfalar boş, 4k bellek boşluğunun sayısıdır.
RI Swamp Yankee

2
Sayfalar ayrıca iOS'ta 4K'dır.
smci

54

Yavaş olmasının sebebi top -l 1, tamamlandıktan sonra daima bir saniye gecikmeler olması , yenilemeler arasındaki standart gecikmedir. Komuta -s 0 eklenmesi anında tamamlanır:

top -l 1 -s 0 | grep PhysMem

Ayrıca, netlik açısından her bir mem-bileşeni satırında göstermeyi seviyorum, bu yüzden sed değiştirme dizesinde 'PhysMem:' ile hizalamak için 9 boşluk ekledim:

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

1
Yavaş yavaş, kullanması çok daha iyi vm_stat.
mgol

3
Evet, sorgulama top, arama yapmaktan daha yavaş vm_statancak topözü daha az ayrıntılı ve birim sayfa değil megabayt. Daha az ayrıntılı olmak için, satır kesmeleri çıkarılabilir ve sonuçlanarak elde awkedilebilir . greptop -l 1 | grep ^PhysMem
Stefan Schmidt

2
Her şey düşünülmüş, bu en iyi cevap. Yararsız pagebirimlerde sonuç vermez / söz konusu birimleri yorumlanabilir hale getirmek için bir çeşit hack sonrası işleme gerektirir.
ijoseph

39

İşte tüm vm_statçıktıyı daha insan dostu yapmak için basit bir astar :

$ 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

Yalnızca takas kullanımına gerçekten ilgi duyuyorsanız (son çıktı satırı ne olurdu free):

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

ondan çok
teşekkür ediyordum

20

freeMac OS X'e benzer bir terminal komutu var ... denirtop

Daha fazla bilgi için bu Apple Destek belgesine göz atabilirsiniz.

Mac OS X: "Top" Yardımcı Programıyla Bellek Kullanımını Görüntüleme


24
Açıkçası, OS X’te “top”, Linux’un “top” komutuna daha çok benziyor elbette :)
calum_b 11:11

6
yukarıdan daha iyi:htop
nXqd

3
@nXqd htop: komut bulunamadı
itsazzad

4
@SazzadTusharKhan demlemek taktıysanız kurulum demlemek
nXqd

2
Teknik olarak hiç benzemiyorlar çünkü ücretsiz baskılar komut satırına güzel ve temiz bir şey verirken, en çok aktif olarak görüntülemekte olduğunuz bir şey.
anon58192932

10

Sadece @zack'ten çözüm alarak etkin olmayan ve spekülatif bloklar eklemek.

#!/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}'

Sadece Unix uzmanları için:

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

1
Bu artık modern macOS'ta herhangi bir sonuç vermemektedir.
Matt Sephton

top -l1 | awk '/PhysMem/ {print $2}'macos'ta kullanım > = Yüksek Sierra
JDS

Kullanılmış bellek
dönmüyor

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

1
Bu komutun şu anki sürümü tcshbenim için çalışmıyor (varsayılan ayarlarım) veya sh. Komut kabuğuna özgü mü?
Graham Perrin

Evet, kesin bashve kshkendine özgü. In tcshdenemede: set freeblocks=`vm_stat | grep free | awk '{ print $3 }' | sed 's/\.//'` ; set freeMB=`expr $freeblocks \* 4096 / 1048576`; set free=`echo $freeMB MiB free`. Daha sonra echo $freeboş hafıza miktarını yazdırmak için yapabilirsiniz . Ayrıca bir takma ad oluşturabilirsiniz: alias free echo $freeMB MiB free.
jaume

7

Diğer sorunuza bakılırsa , bellek durumunuza bakmak için Activity Monitor yardımcı programını kullandığınızı düşünüyorum, değil mi? Sadece kayıt için, / Applications / Utilities / Activity Monitor.app içinde.


7

Mac OS X ile dağıtılan tam bir eşdeğeri yok, ancak bilgi almanın birkaç yolu var:

  1. system_profiler - Tüm Mac'in Sistem Profili bilgilerini kabukta gösterir.
  2. sysctl -a | grep memveya sysctl hw.memsize(toplam mem)

+1, Kurtarma modunda Terminal'den çalışıyor (önyükleme sırasında cmd-r)
Steve Kehlet

7

allmemorySon derece ayrıntılı bellek kullanımı bildiren bir komut satırı aracı istiyorsanız , komutu deneyebilirsiniz .


1
Güçlü bir araç, ancak işlemci yoğun (MacBookPro5,2'deki iki CPU'dan birinin yaklaşık% 95'i) ve çok fazla hafıza kullanılıyorsa: basit bir allmemoryişlem beklenmedik şekilde uzun olabilir - bugün benim için, çalışma başına dört dakikadan fazla, YMMV. Bir çalışma allmemoryFor sysdiagnoseölçüde daha uzun sürebilir.
Graham Perrin 8

6

Yukarıdakiler sevme yolum için çok fazla çaba sarf ediyor ve sizin de tam teşekküllü bir kurulumunuz olduğunu varsayıyor ... Bir Mac OS X başlangıç ​​diskinden başlattıysanız, yukarıdaki tüm çözümler açık bir şekilde işe yaramaz. .. Sadece "hostinfo" komutunu kullanın, işte benim orta 2012 MBAir çalışan Mavericks (10.9.1) çıktı:

 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

Bu komutun iyi tarafı, altında 10.9 yükleyiciye önceden yüklenmiş olarak gelmesidir /usr/bin, bu yüzden çok kullanışlı,

İdeal olarak, sadece RAM istiyorsanız sorun:

$ hostinfo | grep memory

Hostinfo'nun önceki işletim sistemlerinde var olup olmadığını bilmiyorum ...


4
hostinfoGösteri kullanılmış belleği nasıl gösterir ?
yokuş yukarı

3
Bu komut (en azından burada OS 10.6.8’de) yalnızca fiziksel olarak kullanılabilir belleği gösterir, ancak şu anda ne kadar kullanıldığını göstermez
MostlyHarmless 19

Bunun anlamı, özellikle "boş ve kullanılmış hafıza" istediğini belirttiği için sorulan soruyu cevaplamıyor demektir.
saat 4:16 b4hand

5
top -l 1 -s 0 | awk ' /Processes/ || /PhysMem/ || /Load Avg/{print}'

Bu güzel yapmalı :)


3

Bence bu günlerde psutilve meminfo.pysenaryosunda en yararlı bellek kullanımı ayrıntılarını bulabilirsiniz. Dene:

pip install psutil
curl -O https://raw.githubusercontent.com/giampaolo/psutil/master/scripts/meminfo.py
python ./meminfo.py

Ürettiği çıktı şöyle görünür:

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

Yeni uygulamaların başlatılması için , takas yapmadan ne kadar hafızanın mevcutAvailable olduğunu gösteren bir tahmin gösteren satıra dikkat edin .

Kullanılabilir bellek tahminini sağlayan başka bir MacOS yardımcı programı bilmiyorum.

Karşılaştırma açısından: Bir Linux sisteminde, aynı sürümdeki bilgiler, availableşu sürümlerin çıktısındaki sütunda yer almaktadır 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

Yani availablesütun freeçıkışı sadece gelir MemAvailablede /proc/meminfo. Ve sahip olan sistemlerde /proc/meminfo, psutil sadece mevcut belleği tahmin etmek için kullanır.

Ancak MacOS, /proc/meminfobu durumda mevcut belleği tahmin etmek için psutil hesaplamak MemAvailableiçin Linux'ta kullanılan aynı algoritmayı/proc/meminfo kullanır .


3

memory_pressureKomutu deneyebilirsin . Sistemimin çıktısını görün (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%

2

Bash, Mac OSX için "özgür" gibi komutları verir

Bu, bu yazının ikinci reissue. İlk başta iki tane aldım -1. Birincisi ingilizceyi tanımlamamamdı, düzeltildi. Diğeri gawk(standart bir OS X kurulumunun parçası olmayan) kullandığım için düzeltildi, şimdi kullanıyorum awk. -2;-) hala orada. En iyisi belki şimdi komutları kendileri test etmek ve değerlendirmektir.

Kolay ve yapılandırılabilir bir ekrana sahip sadece bir son kullanıcı odaklı komut oluşturmak için ilk fikrimi gözden geçirdim, iki tane yaptım:

  • free-like.sh her zaman "son kullanıcı" odaklı, daha doğru, "kolay" ve yapılandırılabilir bir ekrana sahip ancak daha fazla hesaplama ve kaynak tüketimi içeren bir senaryo,

  • free-like-raw.sh, şimdi daha az hesaplama ve kaynak tüketimi ile, aynı zamanda daha az hassasiyetle, daha az "kolay" ekrana sahip, geliştirici, sysadmin vb.

Fiziksel belleğe ait veriler komutun sonuçlarından çıkarılır vm_stat(sonuçları blok boyutunda döndürür). Bayt cinsinden dönüşümden kaynaklanan kesinlik (number_of_blocks * block_size, hesaplamaların varsayılan değeri) 0 <bloğun büyüklüğü arasında olacaktır. Sanal bellek için veriler topkomuttan alınır . Buradaki yanlışlık topkomutun referans birimi ile bağlantılıdır : kilo, mega, giga.

Hesaplamalar awkyuvarlatılmış sayılar (aksine bc) kullanılarak yapılır. awkayrıca daha hızlıdır bc. Test komut dosyasını burada görebilirsiniz: http://myblog.robert.sebille.name/article29.html#awk-bc

Komutların sonuçlarını bayt (varsayılan), kilo, mega veya giga olarak, free.like.sh durumunda x ondalık basamakla ve ekrana mega ou giga'da görüntülemek isterseniz görüntüleyebilirsiniz.

Komut dosyaları bir yayın için çok uzun, ancak blogumun bu makalesinde bunları bulabilirsiniz: http://myblog.robert.sebille.name/article29.html

Makale fransızcadır, ancak her komut için bir ekran örneği ./free-like.sh -hve ./free-like-raw.sh -hİngilizce olarak entegre yardımlarını ( ve ) gösterir. Bu yardımlar komutları tamamen açıklar. Makale ayrıca kodları da gösterir.

İngilizce benim ana dilim değil. Birisi entegre yardımdaki hataları düzeltmek isterse, açığız;);

senin.


Fransızca bilgisi olmayan biri tarafından az çok kullanılamaz olmasının yanı sıra, komut dosyası gawkiçin standart bir OS X kurulumunun parçası olmayan bir şart gerekiyor .
yokuş yukarı

@patrix: Geri bildiriminiz için teşekkür ederiz İngilizce bir açıklama yapacağım ve tümleşik yardımı da (şu an Fransızca) çevireceğim. gawk: aslında, unuttum, teşekkür ederim. Bazı yerelleştirme sorunları (ondalık virgül veya ondalık nokta) awk ile tanıştım. Nedenini bilmeden ortadan kayboldular. Gawk yerine geri awk için geldim. Bazı şeyleri ayarlamak için biraz zamana ihtiyacım vardı, hazır olduğunda tekrar göndereceğim. Sevgiler.
Robert

1
Sadece gawk'ı awk ile değiştirmek problemsiz bir şekilde benim için çalıştı.
yokuş yukarı


1

vm_stat kilobayt cinsinden gösterir.

Aşağıdaki oneliner megabayt olarak gösterilir:

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

İade:

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

Osx üzerinde fishshell kullanıyorsanız, fisher paket yöneticisi ile birlikte.

Aşağıdaki uzantıyı yazdım: https://github.com/fisherman/free

Osx için serbest komutun tamamen tekrarı. Kendin gör

> 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

Güzel. Hemen çekti.
PeterVP

-1

üst veya htop de sorunu çözmek için yardımcı olabilir.


Farklı sormak hoş geldiniz. Lütfen başvuruda olduğunuz komutların soruyu nasıl cevapladığı hakkında daha fazla bilgi verin.
tubedogg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.