디스크간에 단일 프로세스 일시 중단 / 다시 시작


22

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


7
프로세스가 일시 중단 상태 일 때 사용 된 메모리가 필요한 경우 디스크로 스왑 될 수 있으며 커널에서 자동으로 수행되어야한다고 가정합니다.
enzotib

1
@enzotib-이것이 발생하는지 전혀 알지 못하며 이론 상으로는 이것이 좋습니다. 그러나 방금 거친 테스트를했는데 실제로 작동하지 않습니다. 'RAM 먹는 사람'이 일시 중지 된 상태에서 생성 된 새로운 프로세스는 매우 느리고 RAM이 디스크로 교체 될 경우 예상되는 디스크 활동을 감지하지 못합니다.
Mike Covington

1
@frozenwithjoy 이것이 발생했는지 확인할 수 있습니다. 일시 중단 된 프로세스가 점차적으로 스왑 아웃되지 않는다고 생각할 수있는 유일한 이유는 스왑 불가능 메모리 (요청에 거의 예약되지 않은 메모리)를 요청했거나 매핑 된 메모리가 다른 활성 프로세스와 공유 된 경우입니다 .
Gilles 'SO- 악마 중지

1
여기서 도움이 될 수있는 용어는 "검사 점"입니다 (예, 추한 동사 형태). 프로그램이 잠 들어있는 동안 상태가 변경 될 수있는 일부 리소스를 프로그램이 사용 중일 수 있으므로 일반적으로 어려운 문제입니다. 그 문제를 관리하는 것은 Big Iron과 작은 컴퓨터 사이의 차이점 중 하나였습니다.
dmckee

답변:


8

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

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

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

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

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



5

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


-1

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

vm_stat
purge
vm_stat

2
purge여기서 도움이되지 않습니다. 디스크 캐시를 제거하지만 프로세스 메모리가 스왑 아웃되지 않으며 다른 프로세스가 RAM을 얻는 데 더 빠르지 않습니다.
Gilles 'SO- 악마 그만'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.