OOM 킬러 치아를 다시 제공하려면 어떻게합니까?


12

예전에는 내가 사용했던 앱을 과도하게 공격하고 죽이기 위해 OOM 킬러를 저주했습니다. 이제 시스템이 잘못 작동하여 15 분 동안 시스템이 갑자기 작동하는 것을보고 나서 키보드에 응답하지 않기 때문에 강제 종료에 의존합니다. 그때는.

OOM-killer를 오래된 피에 굶주린 방법으로 어떻게 복원합니까?


1
문제를 일으키는 프로그램을 살펴보고 그들이 흡수 할 수있는 메모리의 양을 제한하십시오limits.conf
LawrenceC

답변:


4

사용 가능한 스왑 공간을 줄입니다. 요즘의 일반적인 설치는 실제 메모리보다 많은 스왑을 할당하려고 시도합니다 (또는 때로는 두 배). 이것의 문제는 무언가가 잘못 될 때, 시스템은 메모리에서 디스크로 물건을 "셔플 링"하려고 시도하는 죽음의 나선형으로 들어가고, 응답 할 시간이 없어서 너무 많은 일을 시작 한다는 것입니다. 사용자 입력에.

비수기에는 전체 프로세스가 디스크로 스왑 아웃되고 다시 스왑되므로 큰 스왑이 필요했습니다.

최신 가상 메모리 시스템에서는 메모리가 전체 프로세스가 아닌 블록 단위로 스왑되므로 더 작은 스왑으로 얻을 수 있습니다. 시나리오에서 프로세스를 강제 종료하는 것이 좋습니다. 따라서 작은 스왑으로 실행하면 시스템에서 디스크로 / 스왑하는 데 많은 시간을 소비하지 않고 OOM이 프로세스 강제 종료를 시작하게됩니다.


나는 스왑이 없으며, 배열 또는 무언가에 푸시하는 것보다 크롬에 무한한 자바 스크립트 루프가있을 때 시스템이 20 분 이상 잠 깁니다. 시스템이 쓸모 없어지기 전에 트리거하려면 OOMK가 필요합니다.
JasonWoof

0

나를 위해 일한 것은 다음과 같습니다.

echo 1 > /proc/sys/vm/oom_kill_allocating_task

그것은 단지이 부팅을위한 것입니다. 브라우저 관리자의 콘솔 탭에서 다음을 실행하여 테스트 할 수 있습니다.

a = []; while (true) { a.push(1); }

이 설정에 만족하면 이후의 모든 부팅에 기본값을 지정할 수 있습니다.

echo "vm.oom_kill_allocating_task=1" >> /etc/sysctl.conf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.