linux out of memory 분석 (OOM)
Linux 는 하나의 특성 이 있 습 니 다. OOM Killer 는 메모리 가 부족 할 때 심각 한 문제 가 발생 하지 않도록 하 는 보호 체제 입 니 다. 무관 한 프로 세 스 를 우선 죽 입 니 다. 즉, 메모리 가 심각하게 부족 할 때 시스템 이 계속 작 동 하기 위해 커 널 은 프로 세 스 를 선택 하여 죽 이 고 메모리 부족 상황 을 완화 합 니 다. 그러나 이러한 보 호 는 유한 합 니 다.프로 세 스 의 실행 을 완전히 보호 할 수 없습니다.
많은 경우 에 남 은 메모리 가 있 을 때 oom - killer 는 프로 세 스 를 죽 였 습 니 다. 현상 은 / var / log / messages 로그 파일 에 다음 과 같은 정보 가 있 습 니 다.
Out of Memory: Killed process [PID] [process name].
이 문 제 는 커 널 이 low memory 를 사용 하여 모든 메모리 분 배 를 추적 하기 때문에 low memory 가 소 진 되 었 다 는 것 이다.
low memory 가 다 소모 되면 high memory 가 얼마나 남 았 든 지 간 에 oom - killer 는 시스템 의 정상 적 인 운행 을 유지 하기 위해 프로 세 스 를 죽 일 것 이다.
32 비트 CPU 에서 주소 지정 범 위 는 제한 되 어 있 습 니 다. Linux 커 널 은 다음 세 개의 영역 을 정의 합 니 다.
# DMA: 0x00000000 - 0x00999999 (0 - 16 MB)
# LowMem: 0x01000000 - 0x037999999 (16 - 896 MB) - size: 880MB
# HighMem: 0x038000000 -
LowMem 구역 (NORMAL ZONE 이 라 고도 함) 은 모두 880 MB 이 며, 고정 적 으로 변 할 수 없 는 (hugemem 커 널 을 사용 하지 않 는 한) 고 부하 시스템 에 대해 서 는 LowMem 의 사용 이 좋 지 않 아 OOM Killer 체 제 를 촉발 시 켰 을 수 있 습 니 다.메모리 할당 은 연속 적 인 영역 이기 때문에 이때 LowMem 에 많은 조각 이 존재 하거나 LowFree 가 너무 적 으 면 연속 적 인 메모리 영역 에 할당 할 수 없 으 면 OOM Killer 를 촉발 합 니 다.
현재 LowFree 값 보기:
cat /proc/meminfo | grep LowFree
LowMem 메모리 조각 보기:
cat /proc/buddyinfo
위의 이 명령 은 2. 6 커 널 이 있어 야 유효 하 다.
다음 과 같은 방법 으로 이 문 제 를 해결 할 수 있다.
1. 64 비트 시스템 으로 업그레이드 하 는 것 이 가장 좋 은 방법 입 니 다. 이때 모든 메모리 가 low memory 에 속 하기 때 문 입 니 다. 이 럴 때 out of memory 를 제시 하면 정말 low memory 가 소 진 되 고 정말 OOM 입 니 다.
2. 32 비트 시스템 을 사용 해 야 한다 면 hugemem 커 널 을 사용 할 수 있 습 니 다. 이때 커 널 은 서로 다른 방식 으로 low / high memory 를 분할 하고 대부분 상황 에서 low memory 에서 high memory 까지 의 맵 을 제공 합 니 다. 이때 간단 한 복구 방법 은 hugemem 커 널 패 키 지 를 설치 한 다음 에 다시 시작 할 수 있 습 니 다.
3. hugemem 커 널 도 사용 할 수 없다 면 / proc / sys / vm / lower 를 시도 해 볼 수 있 습 니 다.zone_protection 의 값 을 250 이상 으로 설정 하면 다음 명령 으로 이 값 을 보고 설정 할 수 있 습 니 다.
cat /proc/sys/vm/lower_zone_protection
echo 250 > /proc/sys/vm/lower_zone_protection
또는 / etc / sysctl. conf 파일 을 수정 하여 재 부팅 후 적용 할 수 있 습 니 다. 추 가 된 내용 은 다음 과 같 습 니 다.
vm.lower_zone_protection = 250
4. 정말 방법 이 없습니다. 그러면 우 리 는 oom - killer 를 끄 겠 습 니 다. 그러나 이 옵션 은 시스템 이 걸 릴 수 있 기 때문에 실제 상황 에 따라 사용 해 야 합 니 다.
현재 oom - killer 상태 보기: cat / proc / sys / vm / ome - kill
oom - killer 닫 기 / 열기:
echo "0" > /proc/sys/vm/oom-kill
echo "1" > /proc/sys/vm/oom-kill
또는 / etc / sysctl. conf 파일 에 직접 추가 합 니 다. 내용 은 다음 과 같 습 니 다.
vm.oom-kill = 0
이 때 프로 세 스 가 oom - killer 에 의 해 죽 이려 고 시도 되 었 으 나 성공 하지 못 했 을 때 관련 정 보 를 / var / log / messages 파일 에 기록 합 니 다. 정 보 는 다음 과 같 습 니 다.
"Would have oom-killed but /proc/sys/vm/oom-kill is disabled"
5. oom - killer 를 끄 지 않 고 단일 프로 세 스 만 처리 하고 특정한 프로 세 스 를 보호 할 수 있 습 니 다. 이때 우 리 는 다음 명령 을 사용 할 수 있 습 니 다.
echo -17 > /proc/[pid]/oom_adj
/proc/[pid]/oom_adj 중 oomadj 의 수치 범 위 는 - 17 ~ 15 입 니 다. 이 값 이 - 17 일 때 시스템 은 지정 한 pid 프로 세 스 를 죽 이지 않 고 - 16 ~ 15 는 프로 세 스 를 / proc / [pid] / omeadj 수 치 는 지수 (K * 2 ^ n) 형식 으로 증가 하고 있다. 즉, 그들 이 죽 을 가능성 은 지수 가 증가 하 는 것 이다.init (프로 세 스 번호 1) 프로 세 스 에 대해 서 는 이 값 이 얼마 로 설정 되 어 있 든 죽 이지 않 습 니 다.
6. 참고 자료
http://www.haw-haw.org/node/626
http://guogoul.com/2010/04/28/oom-killer-swap/
http://zhwen.org/xlog/?p=430
http://www.dbanotes.net/database/linux_outofmemory_oom_killer.html
http://www.sealinger.com/archives/185
이상 은 인터넷 에서 찾 아 자신의 문제 와 결합 하여 보충 하 는 것 입 니 다.
처음에는 시스템 설정 이 2G 이 고 교환 구역 이 없 기 때문에 매일 out of memory 를 초래 했 습 니 다. 나중에 물리 적 메모 리 를 추 가 했 고 교환 구역 을 만 들 었 습 니 다. 상황 이 개선 되 었 으 나 2 - 3 일 후에 도 out of memory 가 나타 날 수 있 습 니 다. 나중에 일본어 메시지 의 굵 은 부분 을 분석 한 결과 low memory 가 부족 해서 생 긴 것 이 라 고 분 석 했 습 니 다. 나중에 스스로 sync 를 테스트 했 습 니 다.echo 3 >> /proc/sys/vm/drop_caches 는 메모리 방출 을 볼 수 있 습 니 다. / proc / buddy info 메모리 방출 을 볼 수 있 습 니 다.
Jun 10 13:33:11 xx user.warn kernel: DMA free:3548kB min:68kB low:84kB high:100kB active:0kB inactive:0kB present:16384kB pages_scanned:0 all_unreclaimable? yes
Jun 10 13:33:11 xx user.warn kernel: lowmem_reserve[]: 0 0 880 4080
Jun 10 13:33:11 xx user.warn kernel: DMA32 free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
Jun 10 13:33:11 xx user.warn kernel: lowmem_reserve[]: 0 0 880 4080
Jun 10 13:33:11 xx user.warn kernel: Normal free:1340kB min:3756kB low:4692kB high:5632kB active:0kB inactive:28kB present:901120kB pages_scanned:2456536 all_unreclaimable? yes
Jun 10 13:33:11 xx user.warn kernel: lowmem_reserve[]: 0 0 0 25600
Jun 10 13:33:11 xx user.warn kernel: HighMem free:1615600kB min:512kB low:3928kB high:7344kB active:274112kB inactive:24928kB present:3276800kB pages_scanned:0 all_unreclaimable? no
Jun 10 13:33:11 xx user.warn kernel: lowmem_reserve[]: 0 0 0 0
Jun 10 13:33:11 xx user.warn kernel: DMA: 1*4kB 1*8kB 1*16kB 0*32kB 1*64kB 1*128kB 1*256kB 0*512kB 1*1024kB 1*2048kB 0*4096kB = 3548kB
Jun 10 13:33:11 xx user.warn kernel: DMA32: empty
J
un 10 13:33:11 xx user.warn kernel: Normal: 1*4kB 1*8kB 1*16kB 1*32kB 0*64kB 0*128kB 1*256kB 0*512kB 1*1024kB 0*2048kB 0*4096kB = 1340kB
Jun 10 13:33:11 CHINASOFT user.warn kernel: HighMem: 8192*4kB 7506*8kB 5166*16kB 2932*32kB 1528*64kB 688*128kB 253*256kB 86*512kB 67*1024kB 12*2048kB 234*4096kB = 1615600kB
이상 은 자신 이 직면 한 문제 입 니 다. 처리 에 잘못된 부분 이 있 을 것 입 니 다. 만약 당신 이 발견 한다 면 지적 해 주 십시오!커 널
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.