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

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의 터미널에 들어갈 때 존재하지 않는 것 같습니다 . 대안이 있습니까?



답변

@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의 탭 크기와 일치하도록 약간 약간 조정되었습니다.)


답변

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


답변

느린 이유는 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'


답변

다음은 전체 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)


답변

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

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

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


답변

그냥 복용 @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