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의 터미널에 들어갈 때 존재하지 않는 것 같습니다 . 대안이 있습니까?
답변
@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)
답변
free
Mac OS X 와 비슷한 터미널 명령이 있습니다.top
자세한 정보는이 Apple 지원 문서를 확인하십시오.
답변
그냥 복용 @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