환경
Virtual Box로 좀 컴퓨팅 자원을 조금 할당한 VM에서 구축한 경량 오픈스택(devstack - Xena) 환경
상황
오픈스택을 설치하고 VM을 생성하고자 했음
Cirros, Fedora, Ubuntu VM 이미지가 있었는데 Cirros 이미지말고는 나머지 이미지로는
VM 시작(Boot) 시 일정 출력 이후로 계속 Disconnected → Shutdown문제 발생
아래와 같은 메시지를 인스턴스가 disconnected → Shutdown이 될 때마다 출력하고 있었음
# qemu-system-x86라는 프로세스를 계속 죽이고 있었음..
[303044.909080] Out of memory: Killed process 997051(qemu-system-x86) total-vm:1586---KB,
anon-rss:3494---KB, file-rss:0kB, shmem-srr: 0kB, UID:119 pgtables:1060kB, oom_score_adj:0
**Out Of Memory Killer**
의 약자로 Linux 시스템에서 메모리가 부족해지고
메모리 할당을 위한 요청이 실패했을 때 활성화되는 커널 서브시스템
⇒ 리눅스 시스템 상에서 메모리가 부족하면 특정 프로세스를 강제로 종료시키는 녀석
OOM이 발생하는 경우 /var/log/messages Path에 프로세스를 강제 종료 시킨 메세지가 기록
Devops와 SE를 위한 리눅스 커널 이야기 2장을 보면,
그래서 리눅스에서는 실제 메모리보다 더 많이 가상 메모리를 프로세스들에게 할당할 수 있음
그러다가 프로세스가 실제 메모리에 접근, 쓰기 작업을 하게 되었을 때 실제 메모리가 부족해진다 ⇒ 원인!
모든 프로세스가 동일하게 종료 처리 되는 것은 아님
oom_score라는 메트릭을 사용하여 결정
oom_score에 영향을 미치는 요인
범위: -1000 ≤ oom_score_adj ≤ 1000
우선순위에서 멀어짐==========우선순위에 가까워짐
그 중 oom_adj 값이 oom_score에 직접적인 영향을 줌
범위: -17 ≤ oom_adj ≤ 15
우선순위에서 멀어짐==========우선순위에 가까워짐
일단 OOM-Killer를 비활성화할 수는 없음
그러나, OOM-Killer의 OOM-Scoring에서 벗어나는 것은 가능
프로세스의 pid를 조회
oom_adj, oom_score_adj 값 조정
echo -17 > /proc/<pid>/oom_adj
==> 권한 문제로 아래 명령어로 시도
sudo bash -c "echo '-17' | tee /proc/<pid>/oom_adj
⇒ 근데 결국 이 VM 때문에 다른 프로세스, 프로그램들이 죽으면서 리눅스 시스템 자체가 비정상적으로 동작함..
⇒ 결국 컴퓨팅 리소스를 넉넉하게 넣어준 Virtual Box VM으로 이주함