나중에 실행하여 메모리 스왑 아웃하기 위해 Linux 프로세스를 중지하는 방법


19

장래에 동일한 프로세스 를 재개하려는 의도로 CPU 또는 실제 메모리 리소스를 소비하지 않도록 장기 실행 프로세스를 중지 하고 싶습니다.

CPU 부분을 사용 SIGSTOP하여 SIGCONT 신호를 얻을 수 있다는 것을 알고 있지만 (정지 된) 프로세스의 개인 RSS 메모리를 즉시 페이지 아웃 (프로세스 더티 페이지의 경우 스왑 아웃 ) 할 수 있습니까?


1
이것의 의도는 무엇입니까? 프로세스가 더 빨리 재개되도록 하시겠습니까? 아니면 민감한 데이터가 디스크에 기록되지 않도록 하시겠습니까? 또는 다른 것? 의도를 알면 더 나은 답변을 줄 수있을 것입니다.
oliver

13
OS가이를 자동으로 수행합니다. 구체적으로해야 할 이유가 없습니다.
David Schwartz

@ oliver 배치 스케줄러 ( github.com/brutusin/wava )를 만들고 있습니다. 현재 구현은 비 선점 적 스케줄링을 제공하지만 모든 실행중인 작업이 대기중인 작업에 의존 할 때 교착 상태를 피하기 위해 선점 적 인 작업으로 이동하고 싶습니다 (작업 실행을 중지 할 수 있음). 중단 된 프로세스를 계속 요청하고 (체크 포인트에서 새 프로세스를 작성하지 않음) 정확하게 작동해야합니다.
idelvall

1
위험한 주장 인
@DavidSchwartz

@idelvall 그렇다면 메모리에 특별한 것을 원하지 않는 것 같습니다.
David Schwartz

답변:


11

검사 점 / 복원이라는 기술을 살펴볼 수 있습니다. 이를 통해 실행중인 프로세스를 수행하고 상태를 파일 세트에 저장 한 후 나중에 복원 할 수 있습니다.
이를 사용하려면 우선 criu [ git , wiki ] 프로그램 ( yum install criu또는 apt install criu) 을 설치하십시오 .

실행중인 프로세스를 체크 포인트하려면 파일을 보유 할 빈 디렉토리를 작성하고 해당 디렉토리로 cd하십시오.

mkdir /var/tmp/checkpoint
cd /var/tmp/checkpoint

이제 실행중인 프로세스를 체크 포인트하십시오. 이 경우 관련 tty가있는 쉘에서 프로세스를 실행하기 때문에 --shell-job을 사용하고 있습니다.

criu dump -t 404 --shell-job

404는 내가 체크 포인트하려는 프로세스의 pid입니다. 이렇게하면 실행중인 프로세스가 종료되고 / var / tmp / checkpoint 디렉토리가 복원하는 데 필요한 파일 세트로 채워집니다.

프로세스를 복원하려면 검사 점 파일이있는 디렉토리에 있는지 확인하고 복원을 수행하십시오.

cd /var/tmp/checkpoint
criu restore --shell-job

프로세스는이 터미널이 실행 된 터미널에서 중단 된 지점에서 처리됩니다. 이 실행중인 프로세스를 종료 한 criu restore --shell-job후 다시 실행 하면 프로세스가 다시 체크 포인트로 되돌아가 다시 시작됩니다.

도움이 되었기를 바랍니다.


4
이것은 OP가 원하는 것을 수행하지 않습니다. 사용해보십시오-사용되는 메모리가 줄어들지 않습니다. 프로세스 개인 메모리에서 디스크 캐시로 전환됩니다 (파일 세트 작성으로 인해). 추가 저장 단계와 추가 복원 단계 만 수행하면 동일한 메모리가 같은 방식으로 사용 (및 배출 가능)됩니다. 실제로, 기록 할 새로운 모든 것을 생성하여 일부 메모리가 복제되면 상황이 악화 될 수 있습니다.
David Schwartz

heh, 좋은 점 @David, 특히 /tmptmpfs (메모리 / 스왑 공간으로 지원) 인 경우. 일반적인 디스크 백업 파일 시스템을 체크 포인트 vmtouch -e하면 페이지 캐시에서 페이지를 제거하는 데 사용할 수 있지만 여전히 임시 RAM을 추가로 사용합니다. (않는 한 criu...) O_DIRECT와 (직접 I / O를 할 수있는 옵션이 있습니다)
피터 코르

1
OP가 해결하려는 문제를 설명하는 대신 OP가 특정 솔루션을 요구하기 때문에 이것이 OP가 원하는지 아닌지 알기가 어렵습니다. 이것은 완벽한 답일 수도 있고 쓸모가 없을 수도 있습니다.
David Schwartz

아직 자세히 살펴 보지는 않았지만 복원 된 프로세스는 새로운 프로세스 (다른 pId) 인 것 같습니다. 그리고 이것이 내가 필요한 것은 아닙니다 ...
idelvall

1
@idelvall : 이것이 대부분의 체크 포인트 / 복원 작동 방식입니다. 한 가지 주요 사용 사례는 재부팅시 계산 진행률을 저장하는 것입니다.
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.