답변:
또 다른 방법은 메모리 오버 커밋을 비활성화하는 것입니다.
온전한 유사성을 메모리 관리로 복원하려면 :
- OOM Killer 비활성화 (
vm.oom-kill = 0
/etc/sysctl.conf에 넣기 )- 비활성화 메모리 오버 커밋 (넣어
vm.overcommit_memory = 2
에서/etc/sysctl.conf
)이러한 설정은 Linux를 전통적인 방식으로 작동하게합니다 (프로세스가 사용 가능한
이것은 삼항 값입니다.malloc()
것 보다 많은 메모리를 요청 하면 실패하고 메모리를 요청하는 프로세스는 해당 실패에 대처할 것으로 예상됩니다).
- 0 = "RAM이 충분한 지 추정하십시오"
- 1 = "항상 예"
- 2 = "메모리가 없으면 아니오"
이로 인해 응용 프로그램이 메모리 부족을 처리하게되고 로그 / 코어 덤프 등이 유용한 정보를 제공 할 수 있습니다.
참고 : 시스템 메모리가 부족하면 새로운 프로세스를 생성 할 수 없습니다! 시스템이 잠겨있을 수 있습니다.
echo 1 > /proc/sys/vm/oom_dump_tasks
커널이 메모리 부족 오류에 표시 될 수있는 최대 값에 대한 것 같습니다.
https://www.kernel.org/doc/Documentation/sysctl/vm.txt
커널이 OOM-killing을 수행 할 때 시스템 전체 작업 덤프 (커널 스레드 제외)를 생성 할 수 있으며 pid, uid, tgid, vm 크기, rss, nr_ptes, swapents, oom_score_adj 점수 및 이름과 같은 정보가 포함됩니다. 이는 OOM 킬러가 호출 된 이유를 판별하고, 그 원인이되는 불량 작업을 식별하고, OOM 킬러가 종료 한 작업을 선택한 이유를 판별하는 데 도움이됩니다.
이것이 0으로 설정되면이 정보는 억제됩니다. 수천 개의 작업이있는 매우 큰 시스템에서는 각 시스템의 메모리 상태 정보를 덤프하지 못할 수 있습니다. 이러한 시스템은 정보가 필요하지 않을 때 OOM 조건에서 성능 저하를 강요해서는 안됩니다.
이것이 0이 아닌 값으로 설정되면이 정보는 OOM 킬러가 실제로 메모리 호깅 작업을 종료 할 때마다 표시됩니다.