rsync가 실제로 가상 머신의 메모리 부족을 일으키는 원인입니까?

rsync가 실제로 가상 머신의 메모리 부족을 일으키는 원인입니까?

우리는 rsync를 프로덕션 환경에서 cron 작업(10분마다)으로 실행하여 AWS EFS의 GB 폴더를 16GB RAM이 있는 VM의 로컬 스토리지에 동기화합니다. 며칠 동안 실행한 후 VM에 메모리가 부족하고 버퍼/캐시 크기가 4GB를 초과하는 것을 발견했으며 이를 사용하여가상 터치동기화 중인 폴더 전체가 캐시된 것을 확인했습니다.

이를 프로덕션 환경에서 실행하고 있으므로 가상 머신의 여유 메모리가 20% 미만으로 떨어질 때마다 소리가 나는 경고 시스템이 있습니다.

따라서 빠른 수정을 위해 명령을 사용하여 rsync를 실행할 때마다 캐시를 ​​지웁니다 echo 2 > /proc/sys/vm/drop_caches.

캐시를 지우는 것이 성능에 영향을 미치기 때문에 저는 이에 전적으로 반대합니다. 하지만 인터넷에는 rsync 작업을 실행한 후 캐시를 지우라고 제안하는 기사가 거의 없습니다. 그 중 일부는 다음과 같습니다.1,2. 캐시를 지우지 말라고 말하는 다른 리소스가 인터넷에 많이 있습니다.

단지 고려rsync

  1. 버프/캐시가 너무 높기 때문에 공격적인 캐싱에 대해 정말로 걱정할 필요가 있습니까?
  2. 나머지 세계는 이 문제에 어떻게 대처하고 있습니까? rsync를 실행할 때마다 캐시를 ​​지우나요?

우리가 사용하는 rsync 명령 rsync -aA --delete /... /...

답변1

사용되지 않은 메모리는 낭비되므로 커널은 여유 메모리를 버퍼 캐시로 사용할 수 있는 것으로 간주합니다. 애플리케이션에 메모리가 필요한 경우 필요한 경우 즉시 삭제할 수 있습니다.

전체 폴더가 캐시되면 이는 원본 파일과 대상 파일 간의 비교가 매우 효율적이라는 것을 의미합니다.

명령 rsync자체는 괜찮아 보입니다. 사용하지 않고 -H(메모리 집약적일 수 있음) 타임스탬프를 효과적으로 유지하고 있습니다( -t에서 암시 -a). 주목해야 할 유일한 다른 부분은 귀하의 경우 rsync로컬 파일 시스템의 한 부분에서 다른 부분으로 복사하므로 업데이트해야 하는 파일만 전체가 복사된다는 것입니다.

관련 정보