cgroup을 사용하는 경우(독립형 또는 docker 또는 kubernetes의 일부로) memory.limit_in_bytes
파일 캐시가 프로세스 메모리 사용량에 포함됩니다. 이것은 내가 피하려고 했던 의도하지 않은 부작용을 가져왔습니다.
일반적으로 cgroup 외부에서 프로세스를 실행할 때 여러 쓰기를 실행하면 해당 쓰기가 블록 캐시에 누적되는 경향이 있으며, 캐시가 가득 차면 쓰기를 계속할 수 있는 충분한 공간이 있을 때까지 IO 작업이 중지됩니다.
메모리 제한이 있는 cgroup(예: docker 컨테이너) 내에서 실행 중이고 많은 쓰기를 빠르게 실행하는 경우 미해결 쓰기로 인해 메모리 제한에 도달했을 때의 동작을 예측할 수 없습니다.
거기에 도달했지만 호스트의 블록 캐시에 공간이 있으면 IO 작업이 중단되는 대신 ENOBUF 또는 유사한 오류로 인해 실패하게 되고 이로 인해 많은 애플리케이션이 실패하게 됩니다. 반면에 블록 캐시가 가득 차면, 평소처럼 일시중지됩니다.
memory.limit_in_bytes
해당 응용 프로그램을 수정하지 않고 파일 캐싱을 무시하거나 적어도 일관성 없는 동작을 피할 수 있는 방법이 있습니까 ?