때때로 로드가 발생하는 프로덕션 서버에서 다음 문제가 발생합니다(Linux 4.10).
- 로드를 처리하는 애플리케이션(웹 서버)이 높은 로드에서 실행 중입니다.
- 새 작업이 시작됩니다(예: cron). 이를 위해서는 메모리 할당에 실패하는 clone() 시스템 호출이 필요합니다.
- 커널 OOM 킬러가 시작되고 웹 서버 응용 프로그램 프로세스 중 하나를 종료하여 새 작업을 시작할 수 있습니다.
- "free -m"은 여유 메모리가 서버의 64GB 중 약 1~3GB로 매우 낮음을 나타냅니다. 그러나 대부분의 메모리는 페이지 캐시에 있습니다.
- 시스템에는 스왑 파티션/파일 설정이 없으며 vm.swappiness는 기본값인 60으로 설정됩니다.
대신 로드가 시작되기 전에 "echo 3 > /proc/sys/vm/drop_caches"를 실행했다면 OOM이 웹 서버 애플리케이션을 종료하지 않고 모든 것이 잘 작동합니다.
위의 조건에서 일부 메모리를 해제하기 위해 프로세스를 종료하기 전에 커널이 페이지 캐시를 해제하지 않습니까?