Linux OOM Killer가 종료 한 프로세스 찾기


172

리눅스에 메모리가 부족할 때 (OOM) OOM 킬러는 일부 휴리스틱을 기반으로 강제 종료 할 프로세스를 선택합니다 (흥미로운 읽기 : http://lwn.net/Articles/317814/ ).

OOM 킬러가 최근에 종료 한 프로세스를 프로그래밍 방식으로 어떻게 확인할 수 있습니까?

답변:


171

이것을 시도하십시오 :

grep -i 'killed process' /var/log/messages

18
FWIW, syslog 또는 kern.log에 해당 메시지가 있지만 / var / log / messages에는 없습니다.
jberryman

36
"egrep -i -r 'killed process'/ var / log /"를 사용하여 다른 곳에서도 검색 할 수 있습니다.
metdos

5
@jberryman : 어떤 이유로 syslog는 /var/log/syslog일부 배포판과 /var/log/messages다른 배포판 에 있습니다. 나는 그것이 전자의 데비안이고 후자는 BICBW의 데비안이라고 생각합니다.
Tom Anderson

5
"dmesg | egrep -i 'killed process'"그리고 어디서나 로그를 검색 할 수 있습니다 (아카이브 로그 포함) :)
John D

2
egrep여기서 이해가되지 않습니다. 평범한 구식 grep이거나 우리가 구체적이라면 fgrep훨씬 더 의미가 있습니다. (그에 따라 답변을 편집합니다.)
antak

148

로그의 위치에 대해 걱정할 필요가 없도록 시도하십시오.

dmesg | egrep -i 'killed process'

1
이것은 또한 유용하지만 불행히도 설명 할 수 /var/log/messages는 없지만 dmesg/에 표시되지 않는 결과 가 나타납니다 /var/log/dmesg. 구성이 잘못되었을 수 있지만 두 가지 방법을 모두 사용하는 것이 좋습니다.
kungphu

3
로그 파일은 확실하지 않지만 dmesg의 출력은 제한된 크기의 링 버퍼입니다. oom-killer 이후에 다른 것들이 버퍼를 채우면 oom-killer 출력을 잃게됩니다.
Dan Pritts

이것이 프로세스가 OpenVZ 컨테이너에서 종료되었음을 확인하는 유일한 방법이었습니다
igo

16
또한 dmesg -T읽을 수있는 타임 스탬프를 얻기 위해 사용 하는 것이 좋습니다
gukoff

2
/ var / log / messages와 비교하면 루트 권한이 필요하지 않은 장점이 있습니다.
Kineolyan

52

이제 dstat는 실행중인 시스템에서 oom 메커니즘에 의해 강제 종료 될 프로세스를 찾을 수있는 기능을 제공합니다.

dstat --top-oom
 --out-of-memory---
  kill score
 java           77
 java           77
 java           77

그리고 맨 페이지 당

  --top-oom
          show process that will be killed by OOM the first

이 정보는 점수의 의미를 모른 채 의미가 없으며 어디에도 기록되어 있지 않습니다. 당신이 볼 수있는 것은 점수 증가, 프로세스가 종료되는 것이므로 oom killer 일 수도 있고 다른 것일 수도 있습니다. 확실한 방법이 없습니다.
로랑

18

이것을 시도하십시오 :

grep "Killed process" /var/log/syslog
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.