Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

프로세스 종료한 적 없는데 Kill이 되어있음.

2021. 9. 1. 10:36server/linux

728x90

dmesg 메시지 확인

1. 메모리 부족으로 인해 OS가 kill을 시킨 경우 (/var/log/message 확인 가능 또는 dmesg 명령어로)

2. Hardware fault 로 stop 된 경우

3. bug로 인해 restart된 경우

 

해결책

실행 메모리 할당량을 늘린다.

 

 

Linux는 실제 물리 Memory보다 많은 양의 가상 Memory 공간을 생성하고 Process에게 할당 한다.
이러한 Memory 관리 정책을 Memory Overcommit이라고 명칭한다. 따라서 다수의 Process가 동시에 많은양의 Memory를 이용할 경우, 물리 Memory 공간이 부족현상이 발생할 수 있다.
Linux의 Swap 기법은 물리 Memory 공간 부족시 Disk의 일부 영역을 Memory 처럼 활용하는 기법이다.
하지만 Swap 기법에 이용되는 Disk 영역인 Swap Space도 가득 찬다면, Linux는 더이상 Memory를 할당할 수 없게된다. 이럴때 Linux는 OOM (Out of Memory) Killer를 이용하여 기존의 동작중인 Process를 강제로 죽여 Memory를 확보하게 된다.

OOM Killer는 Process를 죽일때 임의의 Process를 죽이지 않고, Badness Score라고 불리는 점수가 높은 Process부터 죽인다.
Badness Score는 Memory 사용량이 높을수록 같이 높아진다. 각 Process의 Badness Score는 "/proc/[PID]/oom_score" 파일에서 확인 할 수 있다 (현재 실행중인 프로세스만 확인 가능)

Process의 Badness Score는 System 관리자가 조정할 수 있다. Process의 Badness Score를 조정하기 위해서는 "/proc/[PID]/oom_score_adj" 파일에 조정값을 적으면 된다.


OOM Killer가 Process를 죽일경우, 죽인 Process의 정보는 Kernel Log에 기록된다. Kernel Log는 "dmesg" 명령어 또는 "/var/log/syslog" 파일에서 확인할 수있다.


Memory 사용량 뿐만 아니라 Badness Score에 영향을 주는 요소가 존재한다. 다음의 요소는 Badness Score를 줄이는 요소이다.

Privileged Process (root User Process)
오랜 시간동안 동작한 Process
Hardware에 직접 접근하는 Process
다음의 요소들은 Badness Score를 올리는 요소이다.

많은 Child Process를 생성한 Process
낮은 nice 값을 갖는 Process

728x90