반응형

Memory Management 2

6편. OOMKill은 버그가 아니다

Linux 공식문서로 다시 이해하는 JVM 서버 실행 환경5편에서 Linux는 Heap을 모르고, 페이지와 가상 주소 공간만을 관리한다는 점을 살펴봤다.이번 편에서는 그 연장선에서 가장 당황스러운 현상 하나를 다룬다.“로그도 없이 프로세스가 죽었다”“JVM 예외는 없는데 컨테이너가 재시작됐다”이 현상의 주범은 대부분 OOMKill이다.OOMKill은 예외가 아니라 정책이다많은 개발자가 OOMKill을 이렇게 받아들인다.“메모리 버그가 터졌다”하지만 Linux 관점에서 OOMKill은 버그가 아니다.시스템을 살리기 위한 마지막 선택이다.Linux 커널의 우선순위는 명확하다.개별 프로세스보다시스템 전체의 생존메모리가 고갈되면, 커널은 프로세스를 선택해 제거한다.OutOfMemoryError와 OOMKill은..

5편. 리눅스 메모리는 Heap을 모른다

Linux 공식문서로 다시 이해하는 JVM 서버 실행 환경4편에서 CPU는 스레드를 많이 만든다고 빨라지지 않으며, 컨텍스트 스위칭과 run queue가 지연을 만든다는 것을 살펴봤다.이번 편의 주제는 그 다음으로 자주 오해되는 영역이다.“메모리는 충분한데 왜 느려질까”“Heap은 여유가 있는데 왜 문제가 생길까”이 질문의 답은 JVM이 아니라, Linux의 메모리 관점에 있다.리눅스는 Heap이라는 개념을 모른다JVM 개발자는 메모리를 이렇게 생각한다.HeapMetaspaceStack하지만 Linux 커널은 이 구분을 전혀 모른다.Linux가 아는 것은 오직 이것뿐이다.가상 주소 공간(Virtual Address Space)페이지(Page)물리 메모리Heap은 JVM의 논리적 개념이지, OS의 개념이 ..

반응형