BSD에서 사용 가능한 메모리를 안정적으로 결정

BSD에서 사용 가능한 메모리를 안정적으로 결정

Linux 배포판은 다음과 같은 경향이 있습니다(그러나 실제로는불필요한) free부터 포함프로세스, 메모리 소비를 훌륭하고 간결하게 표시합니다.

# free -m
              total        used        free      shared  buff/cache   available
Mem:           7688        5027         180         827        2479        1589
Swap:          8189        2082        6106

나는 BSD에서 이것을 근사화하기 위해 여러 가지 다른 프로젝트를 시도했지만 모두 다른 답변을 제공했습니다(아마도 컨텍스트가 다르기 때문일까요?). 예를 들어:

# sysctl -a |grep Memory
Virtual Memory:             (Total: 1077397132K, Active 3458308K)
Real Memory:                (Total: 1171952K Active 975744K)
Shared Virtual Memory:      (Total: 56264K Active: 38652K)
Shared Real Memory: (Total: 22184K Active: 19700K)
Free Memory Pages:  1664588K

# sysctl hw |awk '/mem:/ { printf "%s %.0fM\n", $1, $2/1024^2 }'
hw.physmem: 32756M
hw.usermem: 29102M
hw.realmem: 33792M

# grep memory /var/run/dmesg.boot
usable memory = 34346901504 (32755 MB)
avail memory  = 33139134464 (31603 MB)

# top |grep -Em2 '^(Mem|Swap):'
Mem: 980M Active, 25G Inact, 3654M Wired, 948M Cache, 3285M Buf, 678M Free
Swap: 9216M Total, 363M Used, 8853M Free, 3% Inuse

약 7년 전에 이 질문을 한 것은 제가 처음이 아닙니다.풀어 주다FreeBSD 문제 목록 및 Perl 스크립트제안됨그로부터 제공freebsd-memory.pl (여기에 맞게 출력이 감소됨) :

# perl freebsd-memory.pl
SYSTEM MEMORY INFORMATION:
mem_wire:       3831771136 (  3654MB) [ 11%] Wired: disabled for paging out
mem_active:  +  1028284416 (   980MB) [  3%] Active: recently referenced
mem_inactive:+ 26741092352 ( 25502MB) [ 80%] Inactive: recently not referenced
mem_cache:   +   993902592 (   947MB) [  2%] Cached: almost avail. for allocation
mem_free:    +   710340608 (   677MB) [  2%] Free: fully available for allocation
mem_gap_vm:  +      995328 (     0MB) [  0%] Memory gap: UNKNOWN
-------------- ----------- ---------- ------
mem_all:     = 33306386432 ( 31763MB) [100%] Total real memory managed
mem_gap_sys: +  1040515072 (   992MB)        Memory gap: Kernel?!
-------------- ----------- ----------
mem_phys:    = 34346901504 ( 32755MB)        Total real memory available
mem_gap_hw:  +    12836864 (    12MB)        Memory gap: Segment Mappings?!
-------------- ----------- ----------
mem_hw:      = 34359738368 ( 32768MB)        Total real memory installed

SYSTEM MEMORY SUMMARY:
mem_used:       5914402816 (  5640MB) [ 17%] Logically used memory
mem_avail:   + 28445335552 ( 27127MB) [ 82%] Logically available memory
-------------- ----------- ---------- ------
mem_total:   = 34359738368 ( 32768MB) [100%] Logically total memory

다음에서 업데이트됨포크의 답변– 또 다른 방법이 있습니다:

# vmstat -h
 procs      memory      page                    disks     faults         cpu
 r b w     avm    fre   flt  re  pi  po    fr  sr da0 da1   in   sy   cs us sy id
 0 2 0   3372M  1627M    39  32   0   0     8  23   0   0   23   25   38 19  9 71

# swapinfo -h
Device          1K-blocks     Used    Avail Capacity
/dev/da0s1b       9437184     363M     8.6G     4%

위의 BSD 명령 7개(sysctl 양방향, /var/run/dmesg.boot, top, freebsd-memory.pl, vmstat, swapinfo)를 모두 단일 명령줄에서 실행했으므로 출력은 다음과 같이 꽤 일관적이어야 합니다. 많은 충돌하는 값을 참조하세요.

다음 중 "가장 정확한" 것은 무엇입니까? 나는 거의 모든 시스템(또는 단지 BSD)에서 실행할 수 있고 procps free처럼 내 메모리 소비를 간결하게 보여줄 수 있는 작은 스크립트(컴파일이 필요하지 않음!)를 원합니다.

나는 top |grep -Em2 '^(Mem|Swap):'지금 그것을 사용하고 있습니다.

 

참고 사항 1:무료 색상거의 정확히 내가 원하는 것이지만 컴파일이 필요하고 내가 다루고 싶지 않은 종속성이 있지만(나는 이 시스템의 관리자가 아닙니다) 방문자가 이 질문을 보는 데 도움이 될 수 있습니다.

참고 2: procps(Linux) top명령은 파이프와 잘 작동하지 않습니다. 를 사용하면 속도가 빨라질 수 있지만 top -d.1 -n1커서가 사라질 수도 있습니다.

답변1

나는 항상 간단한 자유/활성 수치를 위해 다음을 사용했습니다 vmstat.

~ # vmstat
procs  memory       page                    disks     faults         cpu
r b w  avm   fre   flt  re  pi  po    fr   sr da0 cd0   in    sy    cs us sy id
1 0 2 841M   89M    23   0   0   0    29    9   0   0    4   110    93  0  0 100

매뉴얼 페이지에서:

가상 메모리 및 실제 메모리 사용량에 대한 정보입니다. 가상 페이지(1024바이트 단위로 보고됨)는 실행 중이거나 지난 20초 이내에 실행된 프로세스에 속하는 경우 활성 상태로 간주됩니다.

         avm     active virtual pages
         fre     size of the free list

거래소 사용 정보:

~ # swapinfo -h
Device          1K-blocks     Used    Avail Capacity
/dev/da0p2        2097152      25M     2.0G     1%

관련 정보