LINUX 메모리 높이, OOM - KILLER 문제 해결 촉발

원문:http://www.cnblogs.com/itfriend/archive/2011/12/14/2287160.html  
최근 리 눅 스 의 메모리 문제 두 건 중 하 나 는 oom - killer 를 촉발 하여 시스템 이 끊 겼 다 는 것 이다.
1. 우선 이 시스템 의 버 전이 32 비트 인지 확인

  
  
  
  
  1. #uname -aLinux alarm 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 i686 i386 

2. 32 비트 Linux 의 메모리 관리 구 조 를 알 아 보 겠 습 니 다.

  
  
  
  
  1. # DMA: 0x00000000 -  0x00999999 (0 - 16 MB)# LowMem: 0x01000000 - 0x037999999 (16 - 896 MB) - size: 880MB# HighMem: 0x038000000 - < > 

커 널 은 low memory 를 사용 하여 모든 메모리 분 배 를 추적 합 니 다. 그러면 16GB 메모리 시스템 이 4GB 메모리 시스템 보다 더 많은 low memory 를 소모 해 야 합 니 다. low memory 가 다 소모 되면 시스템 에 남 은 메모리 가 있 더 라 도 oom - killer 를 촉발 합 니 다.2.6 커 널 에 서 는 메모리 사용량 이 가장 높 은 프로 세 스 를 죽 이기 때문에 sshd 등 프로 세 스 가 죽 어 시스템 에 로그 인 할 수 없습니다.

  
  
  
  
  1. -bash-3.00# free -lm  
  2. total used free shared buffers cached  
  3. Mem: 2026 1973 52 0 36 1303  
  4. Low: 874 823 51  
  5. High: 1151 1150 1  
  6. -/+ buffers/cache: 633 1392  
  7. Swap: 3067 142 2924 

4. 그래서 우 리 는 LowMem 을 보호 하고 2.6 커 널 에 lower 를 도입 해 야 합 니 다.zone_protection, 이 는 커 널 이 low memory 를 보호 하고 메모 리 를 할당 할 때 high memory 에서 분 배 를 우선 고려 할 것 입 니 다.

  
  
  
  
  1. -bash-3.00# cat /proc/sys/vm/lower_zone_protection0-bash-3.00#echo 400 > /proc/sys/vm/lower_zone_protection 

또 다른 문 제 는 24G 메모리 시스템 으로 남 은 메모리 가 50m 도 안 된다 는 것 이다.
1. 이 시스템 의 버 전이 64 비트 인지 확인

  
  
  
  
  1. # uname -aLinux gxgd-nms-app 2.6.18-194.el5xen #1 SMP Tue Mar 16 22:01:26 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux 

2. ps 로 각 프로 세 스 의 메모 리 를 보면 대략 4G 를 차지 합 니 다. 대부분의 메모 리 는 Page Cache 가 차지 합 니 다.Linux 커 널 의 전략 은 메모리 cache 파일 시스템 의 데 이 터 를 최대한 이용 하여 IO 속 도 를 높이 는 것 입 니 다. 시스템 에 프로 세 스 가 더 큰 메모 리 를 필요 로 할 때 Page Cache 를 자동 으로 방출 하지만 제때에 방출 되 지 않 거나 방출 되 는 메모 리 는 파편 이 프로 세 스 의 메모리 수요 에 만족 하지 않 기 때 문 입 니 다.
그래서 PageCache 의 상한 선 을 제한 할 수 있 는 방법 이 필요 합 니 다.
Linux 는 이러한 매개 변 수 를 제공 합 니 다 minfree_kbytes, 시스템 이 메모리 의 밸브 값 을 회수 하기 시작 하 는 지 확인 하고 시스템 의 남 은 메모 리 를 제어 합 니 다.값 이 높 을 수록 커 널 이 일찍 메모 리 를 회수 하기 시작 할 수록 남 은 메모리 가 높 습 니 다.

  
  
  
  
  1. [root@zyite-app01 root]# cat /proc/sys/vm/min_free_kbytes163840echo 963840 > /proc/sys/vm/min_free_kbytes 

기타 선택 가능 한 임시 해결 방법:
oom - killer 닫 기
cat /proc/sys/vm/oom-kill
echo "0" > /proc/sys/vm/oom-kill
vi /etc/sysctl.conf
vm.oom-kill = 0
2. cache 비우 기 (선택 가능) echo 1 > / proc / sys / vm / dropcaches

좋은 웹페이지 즐겨찾기