누군가가 얼마나 많은 메모리가 사용되는지에 대해 불평할 때마다 모든 응답은 그것이 단지 캐싱일 뿐이고 무해하며 필요할 때 재할당할 것이라고 주장하는 것처럼 보입니다. 메모리 모니터링 도구에 따르면 그렇지 않다는 것을 분명히 보여주지만 말입니다. 일부 디스크 캐시이지만 "실제" 사용량입니다.
디스크 캐싱은 확실히 문제가 되지 않으며 애플리케이션에 투명하고 간단히 중지할 수 있다는 것을 알 수 있습니다. 하지만 많은 사람들이 주장하는 것처럼 이것이 비디스크 캐싱에도 적용됩니까? 프로세스의 표준 메모리와 캐시에 사용되는 메모리 사이에 일종의 분리가 있습니까? 커널이 언제든지 캐시를 삭제할 수 있습니까?
애플리케이션은 캐싱을 위한 malloc과 표준 malloc 등 목적에 따라 메모리를 할당하는 다양한 방법을 사용해야 하는 것처럼 보이지만 실제로는 "무해한" 캐시를 갖는 유일한 방법인 것 같습니다. 사용 가능한 메모리 양을 지속적으로 수동으로 모니터링하고 사용 가능한 메모리가 줄어들 때 일부 캐시를 삭제하는 것은 상당한 양의 작업처럼 보이며 많은 응용 프로그램이 캐시가 "무해한"지 확인하기 위해 그러한 조치를 취할 것인지 의심됩니다.
답변1
아니요, 커널은 프로세스의 캐시를 관리하지 않습니다. 프로세스에 할당되고 사용되는 모든 메모리는 커널에 의해 "귀중한" 것으로 간주됩니다. 프로세스가 다시 필요할 때 내용을 검색할 수 있는 경우에만 실제 메모리에서 제거됩니다.
Linux에서는 프로세스할 수 있는메모리를 할당하고 다음을 호출하여 필요에 따라 메모리를 회수할 수 있음을 커널에 알립니다.madvise
MADV_FREE
제안이 있으세요. 그러나 프로세스는 이러한 메모리 영역에 무슨 일이 일어나는지 완전히 이해해야 합니다.