Mac OS X Yosemite 10.10.5에서 128GB의 메모리를 할당하고 사용해야하는 계산 (C로 작성된 명령 행 프로그램)을 실행하려고하면 커널이 극단적 인 편견으로 프로세스를 종료합니다. 이 콘솔 로그 항목은 한 인스턴스의 예입니다.
9/25/15 7 : 08 : 40.000 PM 커널 [0] : 낮은 스왑 : pid 6202 종료 (huffgrp)
계산은 64GB의 메모리를 할당하고 사용할 때 적절한 시간 내에 정상적으로 작동합니다. 내 Mac에는 32GB의 RAM과 하드 드라이브에 beaucoup 공간이 있습니다. 또한 8GB RAM이있는 다른 Mac에서도 시도했지만 64GB 계산은 잘 수행되지만 시간이 오래 걸리지 만 128GB 계산은 커널에서 같은 방식으로 종료됩니다.
그건 그렇고, malloc()
내가 얼마나 많은 공간을 요구하더라도 오류를 반환하지 않습니다. 커널은 프로세스에서 실제로 너무 많은 메모리를 사용하고있는 프로세스 만 종료하므로 하드 드라이브로의 스와핑이 많이 발생합니다.
따라서 64GB에서 128GB 사이의 비밀 스왑 공간 제한이있는 것으로 보입니다.
내 질문은 : 더 많은 스왑 공간을 허용하도록 커널을 어떻게 재구성합니까? 유망한 파일을 찾았 /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
지만 거기에 비밀 번호가 표시되지 않습니다. 매뉴얼 페이지에 dynamic_pager
따르면 스왑 파일의 이름과 위치 만 설정하면됩니다. -S
작성된 스왑 파일의 크기를 설정 하는 옵션을 설명하는 동일한 매뉴얼 페이지의 이전 버전이 있습니다. 160GB 스왑 파일을 요청하여 시도했지만 효과가 없었습니다. 스왑 파일은 여전히 각각 1GB였으며 프로세스는 여전히 커널에 의해 종료되었습니다.
malloc
commit_limit가 매우 높기 때문에 (아마도 무한하기 때문에) 가질 수있는 것보다 많은 이유가 있습니다 . 따라서 OS는 가지고 있지 않은 메모리를 할당합니다 (이것은 프로세스가 사용하지 않을 것이라고 내 기고, os는 일반적으로 내기를합니다). 커밋 제한을 메모리 제한으로 조정하면 프로세스가 조기에 실패 할 수 있습니다.
malloc()
. 의 반환 값을 확인하지 않는다고 생각하는 사람에 대한 가능한 의견을 무시하고 malloc()
있었습니다. 그건 그렇고, 나의 목표는 더 일찍 실패하지 않는 것입니다. 내 목표는 성공하는 것입니다.