프로세스가 실행되는 동안 메모리 사용량을 제한하는 방법은 무엇입니까?

프로세스가 실행되는 동안 메모리 사용량을 제한하는 방법은 무엇입니까?

process_a내 서버에는 며칠 동안 실행되는 장기 실행 일괄 프로세스가 있습니다 . 이 과정이 얼마나 오래 걸리는지는 상관하지 않습니다. 문제는 어떻게 process_a메모리(RAM)의 99%를 항상 스스로 가져가느냐이다. process_b이제 정말 실행해야 해요 . 그러나 process_bRAM 부족으로 인해 항상 중단될 수 있습니다.

프로세스가 실행되는 동안 메모리 사용량을 제한하는 방법이 있습니까?

process_a지금까지의 모든 진행 상황이 손실될 수 있으므로 처음부터 다시 시작하고 싶지 않습니다 . 저는 실행 중인 프로그램의 소유자가 아니기 때문에 진행 체크포인트를 주기적으로 저장하도록 process_a수정할 수 없습니다 . 나는 메모리의 일부를 다시 얻을 수 있도록 process_a메모리의 절반을 스왑에 강제로 덤프할 생각을 하고 있습니다 .process_aprocess_b

모든 답변이 문제그리고이 문제프로세스가 실행 중이라는 사실은 다루지 않습니다.

답변1

process_a메모리가 적극적으로 사용되지 않으면 시작 process_b시 메모리가 교체됩니다.

process_a따라서 메모리 교체가 표시되지 않으면 아마도 process_a메모리가 적극적으로 사용되고 있기 때문일 것입니다.

process_a그렇다면 일시적으로 활동하지 않는지 어떻게 알 수 있습니까 ?

일시중지하세요.

kill -TSTP $pid

그런 다음 달리고 움직임이 교체되도록 합니다 process_b.process_a

체크아웃을 교체하기 위해 더 많은 메모리를 확장하려는 경우:https://gitlab.com/ole.tange/tangetools/tree/master/swapout

작업이 끝나면 process_b브레이크를 놓으십시오 process_a.

kill -CONT $pid

답변2

Check for the priority of the process

Higher priority is -20
lower prioritty is +19
Neutral is 0

if process_a is having highher priority based on your requirement reduce the priority (-20 to +19). Higher the priority it will consumes most of resources


You can try with ulimit command options too

관련 정보