[unix] Linux가 거의 가득 찼을 때 왜 메모리 캐시를 제거합니까?

다음은 512MB의 RAM과 nginx / php-fpm / mysqld를 통해 CentOS를 실행하는 VPS의 메모리 그래프가 하루에 수천 명의 방문자에게 (대부분 정적) 콘텐츠를 제공하는 모습입니다.

주간 메모리 그래프

(x 축의 요일)

보시다시피 캐시 및 버퍼 영역에서 상당히 뛰어납니다. 메모리 캐시가 불규칙적 인 간격으로 제거됩니다 (책임있는 크론 작업 제외). 일반적으로 항상 크지는 않지만 더 이상 자랄 수없는 지점에서 제거됩니다. 때로는 거의 절반 만 완전히 지워집니다.

이러한 제거의 논리를 이해하려고합니다. 파일 데이터가 훨씬 오래 캐시되고 메모리 캐시가 지워질 때 평소보다 더 많은 메모리를 사용하는 다른 프로그램을 보지 못합니다.

이 정상적인 동작입니까, 아니면 뭔가 빠졌습니까?

업데이트 : 메모리 업그레이드로 그래프가 안정화 된 것 같습니다. 여전히 작은 방울이 보이지만 업그레이드 이전만큼 중요하지 않습니다.

메모리 업그레이드 후



답변

많은 것들이 될 수 있습니다. 어쩌면 실행중인 프로그램 중 하나가 때때로 많은 RAM을 사용하고 있습니다. 실제로 x 축에서 몇 주가 지나면 훨씬 더 높은 해상도 (예 : 분당 1 회 또는 2 초)로 샘플링하여 진행중인 작업에 대한 자세한 정보를 얻어 캐시가 삭제되도록해야합니다. ps그리고 top그 시간 동안 (평균 부하 포함) 출력도 유용 할 것이다.


답변

가능한 이유 중 하나는 로그와 같이 파일이 커지면서 주어진 크기에 도달하면 제거, 압축 또는 다른 곳으로 전송되기 때문입니다.

두 경우 모두, 원래 파일이 제거 되 자마자 캐시 크기 (OS에 메모리 압력이없는 경우 전체)가 캐시에서 해제됩니다.


답변