캐시 메모리와 공유 메모리의 합이 전체 메모리를 초과합니다.

캐시 메모리와 공유 메모리의 합이 전체 메모리를 초과합니다.

내가 실행하면 free -h다음을 얻습니다.

             total       used       free     shared    buffers     cached
Mem:          251G       208G        43G       179G       144M       190G
-/+ buffers/cache:        17G       233G
Swap:         5.6G       5.6G       1.1M

공유 메모리(179G) + 캐시 메모리(190G)가 어떻게 총 메모리(251G)를 초과하나요? 메모리는 캐시 메모리와 공유 메모리로 간주될 수 있나요?

답변1

모든 shared메모리도 중요합니다 cached.

shared메모리는 tmpfs내부적으로 구현됩니다. tmpfs백업 저장소(스왑 가능 제외) 없이 페이지 캐시 주변의 얇은 래퍼로 구현됩니다 tmpfs.


man free이에 대한 설명은 없습니다. 적어도 내 시스템에서는요(procps-ng에서 제공, 2016-06-03에 마지막 업데이트됨). 죄송합니다. 모든 것은 이것이 에서 가져온 man free것임을 알려줍니다 . (2017년 9월 15 일 에 업데이트된 매뉴얼 페이지에서) 파일의 필드에 대한 문서가 포함되어 있지만 여전히 .cacheCached/proc/meminfoman procmeminfoCachedShmem

이것을 실험적으로 볼 수 있습니다. 메모리가 있으면 free(없으면 available) tmpfs에서 다음과 같은 파일을 만들 수 있습니다.

dd bs=1M count=100 < /dev/zero > /dev/shm/test.tmp

결과적으로 sharedcached숫자가 모두 free -m100씩 증가합니다.

메모리 만 있고 제대로 테스트하기에는 available부족할 경우 에는 페이지 캐시를 최대한 많이 삭제를 실행하여 메모리를 생성 할 수 있습니다 . 물론 페이지 캐시를 제거하는 것은 성능에 매우 해로울 수 있습니다. 실제 서버에서는 이 작업을 수행하지 마세요 :-).freefreeecho 1 | sudo tee /proc/sys/vm/drop_caches

관련 정보