Mac OS X에서 최대 스왑 공간을 늘리려면 어떻게해야합니까?


14

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였으며 프로세스는 여전히 커널에 의해 종료되었습니다.


나는 또한이 질문을 apple.stackexchange.com에 게시했지만 응답이 없습니다.
Mark Adler

1
malloccommit_limit가 매우 높기 때문에 (아마도 무한하기 때문에) 가질 수있는 것보다 많은 이유가 있습니다 . 따라서 OS는 가지고 있지 않은 메모리를 할당합니다 (이것은 프로세스가 사용하지 않을 것이라고 내 기고, os는 일반적으로 내기를합니다). 커밋 제한을 메모리 제한으로 조정하면 프로세스가 조기에 실패 할 수 있습니다.
ctrl-alt-delor

나는 왜 당신이 단락 5가 사실인지, 단락 4에서 시작하지 않는 것을 알 수 없습니다 ( "so"로 시작하지만). 또한 많은 스왑을 추가 해 보셨습니까? (나는 대답이 예라고 생각하지만 질문은 명확하지 않습니다).
ctrl-alt-delor

@richard 예, 왜 그런지 압니다 malloc(). 의 반환 값을 확인하지 않는다고 생각하는 사람에 대한 가능한 의견을 무시하고 malloc()있었습니다. 그건 그렇고, 나의 목표는 더 일찍 실패하지 않는 것입니다. 내 목표는 성공하는 것입니다.
Mark Adler

@richard 커널 메시지에 "낮은 스왑"이 표시되기 때문입니다. "스왑을 많이 추가"에 관해서는, 나는 방법을 모르기 때문에 그렇게하지 않았습니다. 바로이 질문입니다. 어떻게 내가 스왑 공간을 추가하는 방법은 무엇입니까? 물론 커널은 스왑 공간을 자동으로 추가하지만 한도까지만 추가합니다. 따라서 근본 원인 : 커널의 스왑 공간 제한을 어떻게 늘리나요?
Mark Adler

답변:


4

귀하가 요청한 답변은 아니지만 적절한 크기의 파일을 직접 작성하여 프로세스에 입력 한 다음이 주소 공간에서 계산을 실행하면 스왑 파일과 동일한 효과를 낼 수 있습니다. 사용 가능한 RAM / 스왑을 위해 다른 프로세스와 경쟁하는 것과 달리 공간이 있어야합니다.

데이터를 덮어 쓰는 빈도에 따라 속도가 느려질 수 있지만 이식성이 훨씬 뛰어납니다.


2
좋은 생각이야! 나는 큰 희망을 가지고 있었다. 아아, 그들은 가혹한 현실의 해안에 부딪쳤다. 프로세스는 가상 메모리로 사용하기 위해 만든 파일을 사용했지만 이전과 같이 대량의 스와핑을 위해 커널에 의해 여전히 종료되었습니다 ( "낮은 스왑"콘솔 메시지) mmap().
Mark Adler 5

죄송합니다. 대부분의 경험은 Linux에 관한 것입니다. 그러나 문제는 커널이 파일로 다시 플러시하지 않고 대신 RAM에 보관하고 있다는 것입니다. 정기적으로 전화 msync()를 걸어 요청 하면 어떻게됩니까?
데이터가없는

0

내 맥 정보는 꽤 오래되어 더 이상 커널 마법이 없을 수도 있습니다. 따라서 폴더 또는 파티션을 스왑으로 매우 간단하게 마운트 할 수있는이 프로그램에 Linux를 사용하는 것이 좋습니다.

동적 스왑 폴더 사용의 불확실성을 제거합니다. 물리적 스왑 파티션을 만듭니다 (리눅스에서는 스왑을위한 디스크 테이블 유형 코드와 함께 포맷되지 않은 빈 파티션 만 16 진수 코드 0x82입니다).

  1. / etc / rc 파일을 편집하여 스왑 섹션을 찾으십시오. 라인을 추가mount -vat swap
    • / etc / fstab에 모든 스왑 파티션을 마운트합니다.
  2. 운영 pdisk /dev/disk? -dump
    • "?" hd 레코드의 디스크 번호는 스왑 파티션 옆의 번호입니다.
  3. / etc / fstab을 편집하거나 작성하십시오 (아마도 존재하지 않음). /dev/disk?s?? none swap sw 0 0
    • ? 디스크입니다.
    • ?? 스왑 파티션의 번호입니다.
  4. 재부팅하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.