우리는 rsync를 프로덕션 환경에서 cron 작업(10분마다)으로 실행하여 AWS EFS의 GB 폴더를 16GB RAM이 있는 VM의 로컬 스토리지에 동기화합니다. 며칠 동안 실행한 후 VM에 메모리가 부족하고 버퍼/캐시 크기가 4GB를 초과하는 것을 발견했으며 이를 사용하여가상 터치동기화 중인 폴더 전체가 캐시된 것을 확인했습니다.
이를 프로덕션 환경에서 실행하고 있으므로 가상 머신의 여유 메모리가 20% 미만으로 떨어질 때마다 소리가 나는 경고 시스템이 있습니다.
따라서 빠른 수정을 위해 명령을 사용하여 rsync를 실행할 때마다 캐시를 지웁니다 echo 2 > /proc/sys/vm/drop_caches
.
캐시를 지우는 것이 성능에 영향을 미치기 때문에 저는 이에 전적으로 반대합니다. 하지만 인터넷에는 rsync 작업을 실행한 후 캐시를 지우라고 제안하는 기사가 거의 없습니다. 그 중 일부는 다음과 같습니다.1,2. 캐시를 지우지 말라고 말하는 다른 리소스가 인터넷에 많이 있습니다.
단지 고려rsync
- 버프/캐시가 너무 높기 때문에 공격적인 캐싱에 대해 정말로 걱정할 필요가 있습니까?
- 나머지 세계는 이 문제에 어떻게 대처하고 있습니까? rsync를 실행할 때마다 캐시를 지우나요?
우리가 사용하는 rsync 명령
rsync -aA --delete /... /...
답변1
사용되지 않은 메모리는 낭비되므로 커널은 여유 메모리를 버퍼 캐시로 사용할 수 있는 것으로 간주합니다. 애플리케이션에 메모리가 필요한 경우 필요한 경우 즉시 삭제할 수 있습니다.
전체 폴더가 캐시되면 이는 원본 파일과 대상 파일 간의 비교가 매우 효율적이라는 것을 의미합니다.
명령 rsync
자체는 괜찮아 보입니다. 사용하지 않고 -H
(메모리 집약적일 수 있음) 타임스탬프를 효과적으로 유지하고 있습니다( -t
에서 암시 -a
). 주목해야 할 유일한 다른 부분은 귀하의 경우 rsync
로컬 파일 시스템의 한 부분에서 다른 부분으로 복사하므로 업데이트해야 하는 파일만 전체가 복사된다는 것입니다.