Linux 시스템에 "free"명령의 Mac OS X 터미널 버전이 있습니까?


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

freeMac OS X의 터미널에 들어갈 때 존재하지 않는 것 같습니다 . 대안이 있습니까?

답변:


92

@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, 명령 줄에서 호출 하면 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의 탭 크기와 일치하도록 약간 약간 조정되었습니다.)


이 스크립트를 사용하는 가장 좋은 방법은 무엇입니까?
iddober

2
정확히 무엇을 의미하는지 잘 모르겠습니다 ... 복사하여 새 파일에 붙여 넣고 어딘가에 저장하고 (어쩌면 / usr / local / bin에) 실행 파일로 만들고 실행 하시겠습니까?
drfrogsplat

@idober가 실행 예제와 출력 (예 : 화면 캡처)
AJ를 포함시키는 것이 좋습니다.

@AJ, 아, 알았어요
drfrogsplat 3

6
그냥 내 2 센트 :ps -caxm -orss= | awk '{ sum += $1 } END { print "Resident Set Size: " sum/1024 " MiB" }'
볼트

70

필요한 명령 vm_stat은 전통적인 유닉스 도구와 비슷 vmstat하지만 MACH에 따라 약간의 차이가 있습니다. 매뉴얼 페이지가 잘 작성되었습니다.


2
'페이지'란 무엇입니까?
DilithiumMatrix

8
@zhermes-시스템에서 사용할 수있는 가장 작은 메모리 단위입니다. x86 및 PPC Mac의 경우 4k입니다. 사용 가능한 페이지 수는 4k 단위의 사용 가능한 메모리 수입니다.
RI Swamp Yankee

2
iOS에서도 페이지가 4K입니다.
smci

54

느린 이유는 top -l 1완료 후 표준 새로 고침 사이의 표준 지연이 완료된 후 항상 1 초 지연 되기 때문 입니다. 명령에 -s 0을 추가하면 즉시 완료됩니다.

top -l 1 -s 0 | grep PhysMem

또한 명확성을 위해 각 mem 구성 요소를 줄에 표시하는 것을 좋아하므로 sed 교체 문자열에서 'PhysMem :'과 정렬 할 공백을 9 개 추가했습니다.

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

1
개가 느리고 활용하는 것이 훨씬 좋습니다 vm_stat.
mgol

3
예, 쿼리 top는 호출하는 것보다 상당히 느리지 vm_stattop추출은 덜 장황하며 단위는 페이지가 아닌 메가 바이트입니다. 좀 더 장황하게하기 위해 줄 바꿈을 제거하고 결과 awk로 대체 할 수 있습니다 . greptop -l 1 | grep ^PhysMem
Stefan Schmidt

2
모든 것을 고려하면 이것이 최선의 대답입니다. 도움이되지 않는 page단위로 결과를 제공하지 않으며 해당 단위를 해석 할 수 있도록 해킹 후 처리가 필요합니다.
ijoseph

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

스왑 사용에만 관심이있는 경우 (의 마지막 출력 줄 free) :

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

나는 그것을
고맙게도

20

freeMac OS X 와 비슷한 터미널 명령이 있습니다.top

자세한 정보는이 Apple 지원 문서를 확인하십시오.

Mac OS X : "맨 위"유틸리티를 사용하여 메모리 사용량을 보는 방법


24
엄밀히 OS X에 "최고"를 말하는 것은 :) 물론, 리눅스 "최고"명령에 오히려 더 비슷합니다
calum_b

6
최고보다 나은 :htop
nXqd

3
@ nXqd htop : 명령을 찾을 수 없습니다
itsazzad

4
brew가 설치되어 있으면 @SazzadTusharKhan brew 설치 htop
nXqd

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}'

유닉스 전문가에게만 해당 :

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

1
이것은 더 이상 최신 macOS의 결과를 반환하지 않습니다.
매트 Sephton

top -l1 | awk '/PhysMem/ {print $2}'macOS에서 사용 > = High Sierra
JDS

사용 된 메모리를 반환하지 않습니다
theillien

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

1
해당 명령의 현재 버전이 tcsh(내 기본값) 또는 에서 작동하지 않습니다 sh. 명령이 쉘 특정입니까?
Graham Perrin

네, 그렇습니다 bashksh특정. 에서 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

다른 질문으로 판단 하면 Activity 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)
Steve Kehlet

7

allmemory매우 상세한 메모리 사용량을보고하는 명령 행 도구를 원하면 명령을 시도하십시오 .


1
강력한 도구이지만 프로세서를 많이 사용하고 (내 MacBookPro5,2에있는 두 개의 CPU 중 하나의 약 95 %), 많은 메모리를 사용하는 경우 : 간단한 실행 allmemory시간이 예기치 않게 길어질 수 있습니다. YMMV. allmemoryfor of run은 sysdiagnose상당히 오래 걸릴 수 있습니다.
Graham Perrin

6

위의 내용은 취향에 따라 너무 많은 노력을 기울였으며 설치가 완전히 완료된 것으로 가정합니다. Mac OS X 시동 디스크로 부팅 한 경우 위의 모든 솔루션이 작동하지 않습니다. .. "hostinfo"명령을 사용하십시오. 다음은 Mavericks (10.9.1)를 실행하는 2012 년 중반 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

그래도 이전 OS에 hostinfo가 있는지 알 수 없습니다 ...


4
사용한 메모리 는 어떻게 hostinfo표시 됩니까?
nohillside

3
이 명령 (적어도 여기서 OS 10.6.8에서)은 실제로 사용 가능한 메모리 만 보여 주지만 현재 사용 된 메모리
양은 아닙니다.

이것은 "자유롭고 사용 된 메모리"를 원한다고 구체적으로 말했기 때문에 실제로 질문에 대답하지 않습니다.
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

출력의 해당 availablefree은에서 시작 MemAvailable됩니다 /proc/meminfo. 그리고이 시스템에서 /proc/meminfo, psutil은 또한 그냥 사용 가능한 메모리를 추정하기 위해 사용합니다.

그러나 MacOS에는을 /proc/meminfo사용할 수 없으므로이 경우 사용 가능한 메모리를 추정하기 위해 psutilLinux에서 사용한 것과 동일한 알고리즘을 사용하여를 계산 MemAvailable합니다/proc/meminfo .


3

memory_pressure명령을 시도 할 수 있습니다 . 시스템 출력 확인 (i5, 4GB 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

Mac OSX 용 Bash 명령은 "무료"입니다.

이것은이 게시물의 두 번째 재발행입니다. 처음에 나는 두 개를 얻었다 -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

free-like.sh의 경우 x 소수점 이하 자릿수와 함께 mega ou giga의 표시를 요청하는 경우 명령 결과를 킬로, 메가 또는 기가 바이트 단위로 바이트 (기본값) 단위로 볼 수 있습니다.

스크립트가 너무 길어서 게시 할 수 없지만 내 블로그의이 기사에서 찾을 수 있습니다 : http://myblog.robert.sebille.name/article29.html

이 기사는 프랑스어로되어 있지만 각 명령에 대한 표시 예와 통합 도움말 ( ./free-like.sh -h./free-like-raw.sh -h)을 영어로 표시합니다. 이 보조 도구는 명령을 완전히 설명합니다. 기사는 코드도 표시합니다.

영어는 모국어가 아닙니다. 누군가가 통합 도움말의 오류를 수정하려면 환영합니다.).

당신 것.


프랑스어에 대한 지식이없는 사람이 다소 사용할 수 없게하는 것 외에도 스크립트 gawk는 표준 OS X 설치의 일부가 아닌 스크립트를 요구 하는 것 같습니다 .
nohillside

@patrix : 의견을 보내 주셔서 감사합니다. 영어로 설명하고 통합 도움말도 번역합니다 (현재 프랑스어). gawk : 사실, 나는 잊었다. 고마워. awk와 함께 일부 현지화 문제 (십진 쉼표 또는 소수점)를 만났습니다. 그들은 이유를 모른 채 사라졌습니다. 나는 gawk 대신 awk로 돌아왔다. 조정하는 데 약간의 시간이 필요했습니다. 준비가되면 다시 게시하겠습니다. 당신 것.
Robert

1
gawk를 awk로 바꾸는 것만으로도 문제가 없었습니다.
nohillside


1

vm_stat 킬로바이트 단위로 보여줍니다.

아래의 oneliner는 MB 단위로 표시됩니다.

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

만약 당신이 피셔 패키지 매니저와 함께 osx에 fishshell을 사용한다면.

나는 다음 확장을 썼다 : 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.