메모리 보고 문제

메모리 보고 문제

시스템 모니터를 보니 메모리의 48%만 사용하고 있는 것으로 나타났습니다. gkrellm과 동일합니다. 그러나 모든 명령줄 유틸리티는 다르게 보고합니다. 이것은 free 및 /proc/meminfo의 출력입니다. 내가 생각할 수 있는 유일한 이유는 그래픽 유틸리티가 캐시 수를 무시한다는 것입니다. 하지만 여전히 물리적 메모리에 저장되어 있지 않습니까? 둘(그래픽 및 명령줄) 사이에 왜 그러한 차이가 있습니까? 캐싱이 중요하지 않나요?

미리 감사드립니다

무료로

             total       used       free     shared    buffers     cached
Mem:       1915936    1831836      84100          0      11280     874072
Swap:      3866620     146944    3719676

고양이/proc/meminfo

MemTotal:        1915936 kB
MemFree:           81740 kB
Buffers:           11900 kB
Cached:           869224 kB
SwapCached:         4128 kB
Active:           722020 kB
Inactive:         887300 kB
Active(anon):     669976 kB
Inactive(anon):   235424 kB
Active(file):      52044 kB
Inactive(file):   651876 kB
Unevictable:       50812 kB
Mlocked:               0 kB
SwapTotal:       3866620 kB
SwapFree:        3719680 kB
Dirty:               460 kB
Writeback:             0 kB
AnonPages:        776964 kB
Mapped:            52052 kB
Shmem:            126384 kB
Slab:              77824 kB
SReclaimable:      37580 kB
SUnreclaim:        40244 kB
KernelStack:        2800 kB
PageTables:        33836 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4824588 kB
Committed_AS:    2622452 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      560312 kB
VmallocChunk:   34359122920 kB
HardwareCorrupted:     0 kB
AnonHugePages:    118784 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       12288 kB
DirectMap2M:     1949696 kB

답변1

/proc/meminfo의 세부 사항은 다음과 같습니다.

MemTotal: 사용 가능한 총 메모리 양(예: 물리적 메모리에서 일부 예약된 비트 및 커널 바이너리 코드를 뺀 값)

MemFree: LowFree+HighFree의 합계입니다(전체 통계).

메모리 공유: 호환성상의 이유로 0이지만 항상 0입니다.

SwapCache: 한 번 스왑 아웃된 메모리는 다시 스왑 아웃되지만 여전히 스왑 파일에 있습니다(메모리가 필요한 경우 이미 스왑 파일에 있으므로 다시 스왑 아웃할 필요가 없습니다. 이렇게 하면 I/O가 절약됩니다).

/proc/meminfo에 설명된 캐시는 메모리에서 페이지 캐시(diskcache)의 SwapCache를 뺀 값입니다.여기그리고 이 설명은여기

gkrellm은 사용 가능한 메모리와 사용된 메모리를 계산하도록 지시합니다.

여기에서 사용된 메모리와 사용 가능한 메모리는 커널에서 보고된 사용된 메모리와 사용 가능한 메모리에서 버퍼와 캐시를 뺀 값을 기준으로 계산됩니다. 추가 정보 파일을 보고 free 명령의 "-/+ buffers/cache:" 줄과 비교해 보세요. 3개의 메모리 크렐이 표시된 경우 커널 "원시 사용 가능"은 가장 오른쪽 크렐 뒤의 공간입니다.

실행하면 free -m커널이 파일 시스템 버퍼 등에 사용하는 메모리 양을 알려주는 "버퍼" 및 "캐시" 열이 표시됩니다.

이 캐시된 데이터는 애플리케이션이 "사용 가능한" 것보다 더 많은 데이터를 할당하려고 시도할 때 커널에 의해 해제됩니다. 이것이 바로 "-/+ buffers/cache" 라인이 실제로 사용할 때 주의해야 하는 중요한 라인인 이유입니다. 그것. 시스템에서 사용 가능한 메모리를 확인합니다. 바라보다여기

답변2

캐싱은 성능 측면에서 중요합니다. 그러나 여유 ​​메모리의 경우: 사용 가능한 것보다 더 많은 메모리가 필요한 경우 일부 캐시 메모리가 자동으로 해제됩니다.

관련 정보