kvm 버전: QEMU emulator version 1.1.2 (qemu-kvm-1.1.2+dfsg-6+deb7u3, Debian), Copyright (c) 2003-2008 Fabrice Bellard
libvirtd 버전: libvirtd (libvirt) 0.9.12.3
debian 버전:7.5
저는 16GB RAM 시스템에서 여러 가상 시스템을 실행하고 있으며 총 ~9GB RAM을 사용합니다.
때때로 Linux oom Killer가 나타나 프로세스를 종료합니다. 대부분의 메모리를 사용하는 프로세스(이 경우 6GB Windows VM)를 선택할 것 같습니다.
[431215.778365] Out of memory: Kill process 25086 (kvm) score 192 or sacrifice child
IMHO, 사용 가능한 캐시 메모리가 ~6.6GB이므로 머신이 OOM 상황에 있어서는 안 됩니다. 여기에서 메모리 할당과 결과적인 oom kill을 볼 수 있습니다.
oom_adj
-17
이제 oom-killer가 프로세스를 종료하지 않도록 kvm의 pid를 설정했습니다 .
그러나 커널이 프로세스를 종료해야 한다고 생각하고 일부 캐시 메모리를 해제하지 않는 이유를 여전히 이해할 수 없습니다.
- 왜 이런 일이 발생하는지 설명할 수 있는 사람이 있나요?
- PID를 모르면서 oom Killer가 내 kvm 프로세스를 종료하는 것을 방지하는 방법을 알려주실 수 있나요?
답변1
다음 명령을 사용하여 특정 프로세스를 비활성화하십시오 OOM Killer
.
for p in $(pidof kvm qemu-system32_x64); do
echo -n '-17' > /proc/$p/oom_adj
done
아니면 맛으로 oom_score adj
.
하지만:
메모리 부족: 프로세스 25086(kvm) 점수 192 종료 또는 하위 프로세스 희생
귀하의 경우에도 192
.
당신은 또한 볼 수 있습니다OOM 킬러 길들이기
어떤 경우든 OOM Killer는 다른 중요한 프로세스를 종료하므로 메모리 오버플로의 원인도 확인해야 합니다.
사람들은 종종 이라는 현상을 관찰합니다 overtuning
. 이 경우 overcommit_memory
설명된 대로여기.
원천프로세스 파일 시스템:
oom_adj:
For backwards compatibility with previous kernels, /proc/<pid>/oom_adj may also
be used to tune the badness score. Its acceptable values range from -16
(OOM_ADJUST_MIN) to +15 (OOM_ADJUST_MAX) and a special value of -17
(OOM_DISABLE) to disable oom killing entirely for that task. Its value is
scaled linearly with /proc/<pid>/oom_score_adj.
oom_score_adj:
The value of /proc/<pid>/oom_score_adj is added to the badness score before it
is used to determine which task to kill. Acceptable values range from -1000
(OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX). This allows userspace to
polarize the preference for oom killing either by always preferring a certain
task or completely disabling it. The lowest possible value, -1000, is
equivalent to disabling oom killing entirely for that task since it will always
report a badness score of 0.