/proc/sys/vm/drop_caches에 동기화하고 쓰면 실제로 모든 디스크 캐시/버퍼가 지워지나요?

/proc/sys/vm/drop_caches에 동기화하고 쓰면 실제로 모든 디스크 캐시/버퍼가 지워지나요?

디스크 캐시/버퍼를 지우려면 일반적으로 다음 명령을 실행합니다.

# sync && echo 3 > /proc/sys/vm/drop_caches

그러나 명령을 입력한 후에는 free실제로 열에 아무것도 보고되지 0않습니다 buff/cache. 예는 다음과 같습니다.

# free -m
              total        used        free      shared  buff/cache   available
Mem:          7.6Gi       2.9Gi       3.6Gi       238Mi       1.1Gi       4.1Gi
Swap:         9.8Gi       1.0Mi       9.8Gi
Total:         17Gi       2.9Gi        13Gi
                                                                                                                 
# sync && echo 3 > /proc/sys/vm/drop_caches

# free -m
              total        used        free      shared  buff/cache   available
Mem:          7.6Gi       2.8Gi       4.2Gi       224Mi       588Mi       4.2Gi
Swap:         9.8Gi       1.0Mi       9.8Gi
Total:         17Gi       2.8Gi        13Gi

따라서 캐시에 있었다 1.1G588M.

이것을 588M줄일 수 있나요 0? (아마도) 그렇지 않다면 그 이유는 무엇입니까? 그리고 sync파일을 내보내고 쓴 후에 캐시/버퍼가 얼마나 남았는지 미리 알 수 있는 방법이 있습니까 /proc/sys/vm/drop_caches?

답변1

아니요, 캐시에는 (보통 열려 있는) 파일에 대한 버퍼뿐만 아니라반품실행 중인 애플리케이션 및 라이브러리의 디스크 이미지.

그리고 동기화를 실행하고 /proc/sys/vm/drop_caches 파일에 쓴 후 미리 캐시/버퍼의 양을 알 수 있는 방법이 있습니까?

나에게 이것은 매우 사소한 작업처럼 보이지만 해결책이 있을 수 있습니다. 열려 있는 애플리케이션/라이브러리 파일의 크기를 계산하면 올바른 방향을 얻을 수 있지만 그렇지 않습니다. 예를 들어 Google Chrome을 실행하는 경우 바이너리 크기는 160MB이지만 완전히 캐시되지는 않습니다. 모든 기능이 동시에 실행되지는 않습니다.

원하는 답에 가까워야 하는 메모리 범위를 계산할 수 있으며 /proc/$PID/maps, 실행 중인 애플리케이션 간에 공유되는 범위도 확인할 수 있습니다.

관련 정보