우리 프로젝트에는 약 3~4시간 동안 지속적으로 실행되는 몇 가지 테스트가 있습니다. 당연히 충분한 메모리를 찾을 수 없기 때문에 테스트가 실패하게 됩니다. 인터넷 검색을 통해 다음 명령을 실행하면 테스트를 재개하는 데 도움이 된다는 것을 알았습니다.
sync; echo 3 > /proc/sys/vm/drop_caches
그러나 이는 야간 테스트이므로 수동 개입 없이 실행할 수 있다면 많은 도움이 될 것입니다.
저는 단지 이 작업을 수행하기 위한 옵션을 찾고 있을 뿐입니다.
여러 링크를 찾았습니다1그리고2표면적으로는 이것이 유용할 수 있습니다.
cron 탭 업데이트를 진행하기 전에 다른 옵션을 알고 싶습니다.
정기적으로 캐시를 삭제해도 괜찮나요? 다른 문제를 일으킬까요?
메모리를 더 추가하면 도움이 될까요? 내 옵션은 무엇입니까?
답변1
메모리를 더 추가하면 도움이 될까요?
sync
이 두 명령(및 )을 실행한 후 테스트가 성공하는 이유를 알지 못하면 말하기 어렵습니다 drop_caches
. 저는 솔직히 대기 시간 문제로 인해 테스트가 실패하지 않는 한 파일 시스템 캐시를 제거해도 테스트가 제대로 작동할 것이라고 생각하지 않습니다. 커널은 메모리가 아래로 떨어졌음을 발견하면 min_free_kbytes
캐시에서 가장 오래된 항목을 제거하기 시작하여 실제 사용 가능한 메모리를 최소한 으로 되돌립니다 min_free_kbytes
. 이 프로세스의 유일한 예외는 "더티"로 표시된 페이지입니다. 따라서 파일 시스템 캐시의 존재는 커널이 정리할 항목을 찾을 수 있는 것보다 애플리케이션이 더 빠르게 메모리를 할당하지 않는 한 일반적으로 문제가 되지 않습니다(이 경우 증가는 min_free_kbytes
정상입니다).
가장 유용한 명령은 sync
비동기 디스크 I/O 전용 버퍼용 메모리를 확보하는 것입니다(또한 dirty
파일 시스템 캐시에서 모든 항목을 제거하여 메모리 부족 상황에서 해당 항목을 제거할 후보로 만듭니다).
RAM을 추가하면 도움이 될 가능성이 약 80~90%라고 생각합니다., 하지만 어떤 테스트를 실행하고 있는지 모르기 때문에 확실하게 말할 수는 없습니다.
정기적으로 캐시를 삭제해도 괜찮나요? 다른 문제를 일으킬까요?
여기서 수행하는 작업은 기본적으로 성능 조정입니다(또는 최소한 해당 목적으로 제공된 조정 가능 항목을 사용하고 있습니다). 조정 가능한 매개변수는 종종 "올바른" 대답이 불가능하거나 비현실적인 것으로 간주될 때 제공됩니다. 실행 방법에 대한 일반 규칙을 만들 수 있다면 소프트웨어가 이를 수행하도록 허용하고 시스템 관리자는 개입하지 않을 것입니다.
그러나 이것이 문제를 일으키지 않을 것이라고 절대적으로 확신할 수는 없습니다. 우리는 말할 수있다그것아마도일으키지 않을 것이다기능 상실그러나 우리는 확신할 수 없습니다.파일 시스템 캐시는 성능을 향상시키도록 설계되었기 때문에 애플리케이션이 무엇이든 읽기 전에 디스크에서 데이터를 기다리도록 강제하는 것은 아마도 바람직하지 않을 것입니다(때로는 바람직하지 않지만 필요할 수도 있음).
편집하다:
@Emmanuel의 의견을 읽어보세요. 그는 좋은 지적을 합니다. 사용하지 않은 스왑 공간이 있는 경우 스왑 공간을 늘려 vm.swappiness
덜 사용된 응용 프로그램 메모리를 스왑하는 커널의 선호도를 높일 수 있습니다. 더 많은 스왑 공간이 필요하거나 없는 경우 스왑 파티션 및 스왑 파일 생성에 대한 지침을 온라인에서 찾을 수 있습니다.
편집 #2
아직 이것을 가지고 놀지는 않았지만 커널 문서를 보면 dirty_ratio
커널이 자체 작업을 수행하기 전에 메모리에 얼마나 많은 더러운 데이터가 보관되는지 제어하는 sysctl 조정 가능 항목 이 있습니다 sync
. 이를 낮추어 파일 시스템 캐시가 "Dirty"로 표시되어 메모리가 필요할 때 제거될 수 있습니다.