디스크간에 단일 프로세스 일시 중단 / 다시 시작 다른 작업을 위해 일부 RAM을

때때로 우분투 및 OS X 서버에서 메모리 집약적 인 프로세스를 일시 중단하여 다른 작업을 위해 일부 RAM을 일시적으로 해제하려고합니다. 우리가 걱정 한 모든 것이 CPU 사용량 Ctrl-Z이라면 간단 합니다. 그러나 RAM을 디스크에 기록하여 디스크를 비운 다음 프로세스 (디스크-> RAM)를 다시 시작하거나 즉, 단일 프로세스를 “최대 절전”할 수 있어야합니다. 이 작업을 수행하는 방법에 대한 단서가 있습니까? (CLI에서 선호) 감사합니다.



답변

단일 프로세스를 동면시키는 일반적인 기능은 없으며 전체 시스템 만 있습니다.

그러나 프로세스 이미지가 재부팅 후에도 유지되지 않는 경우 프로세스 이미지를 디스크에 저장하는 기본 제공 기능인 스와핑이 있습니다. 스왑 공간이 충분한 지 확인하고 메모리 압력이 있고 프로세스가 활성 상태가 아닌 경우 (예 : 일시 중단으로 인해) 메모리가 스왑됩니다.

프로세스가 오랫동안 비활성 상태이고 어떤 시점에서 빠른 응답 시간이 필요하다는 것을 알고 있다면 많은 RAM을 할당하여 많은 RAM을 강제로 해제 할 수 있습니다. 단기 프로세스, 예.

perl -e '$tmp = "a" x 999999999' # allocate about 1GB

스왑 아웃을 제어 할 수 없으므로 다른 프로세스가 스왑 아웃 될 수 있습니다. Linux에서는 매핑 된 페이지에 강제로 액세스하여 프로세스를 다시 바꿀 수 있습니다. 이 답변 의 스크립트 는 프로세스에 의해 매핑 된 모든 페이지를 메모리에로드합니다 (여기에는 열린 파일이 포함되어 있습니다.지도 정보를 기반으로 선택적으로 영역을 탐색하여 필요하지 않은 데이터가 스왑되지 않도록 할 수 있습니다) 자세한 내용 은 이 답변 을 참조하십시오).


답변

찾고있는 용어는 ” 응용 프로그램 검사 점 “입니다.

내가 할 수있는 도구는 CryoPID 및 CryoPID2 입니다.

두 도구 모두 Linux 전용입니다.

BSD 또는 OS X 용 비슷한 도구를 모르겠습니다.


답변

스왑 공간이 충분한 지 확인하십시오. 시스템이 비활성 페이지를 교환하도록 설정되어 있는지 확인하십시오 ( vm.swappiness = 100 ). 그런 다음 프로세스를 일시 중단하기에 충분해야합니다. 커널은 비활성 페이지를 바꾸는 것을 선호합니다.


답변

Mac OS X purge에서는 (비활성화 된) RAM을 비우기 위해 Xcode와 함께 제공된 명령 을 사용하려고 할 수 있습니다 .

vm_stat
purge
vm_stat