나중에 실행하여 메모리 스왑 아웃하기 위해 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.