한 가지 프로세스가 방대한 양의 메모리를 할당합니다 (메모리 누수 버그 때문일 수는 없습니다. 입력 파일을 처리 할 수 없기 때문에). RAM이 가득 차고 어느 시점에서 Linux는 스왑으로 전환해야합니다. 글쎄, 때로는 이것이 최후의 수단 일 것입니다. 비싼 계산이 있다면, 결국 RAM이 부족 해지면 데이터를 잃고 싶지 않습니다.
그러나 (제 경험상) 메모리 소비는 불량하고 아마도 버그가 많은 프로세스에 의해 제한되지 않습니다. 즉, 스왑을 위해 덜 긴급하게 필요한 데이터 로 끝나는 것이 아니라 OS가 대량의 데이터를 패닉 적으로 스왑해야합니다. 불행히도 문제가되는 프로세스를 심하게 깨뜨릴뿐만 아니라 전체 시스템을 거의 정지시킬 수 있습니다 (SSD가있는 머신에서는 더 이상 나쁘지 않지만 OTOH는 기가 바이트 및 기가 바이트의 가비지 데이터를 쓸 수 있는지 걱정합니다. 장기적으로 플래시 셀에 해를 끼칩니다).
문제를 발견하고 수동으로 프로세스를 종료 할 때까지 (가상 터미널에 로그인 할 때까지 실제로 몇 분이 걸렸습니다!), 실행중인 세션의 절반이 스왑되어 시스템이 원활하게 실행될 때까지 꽤 기다려야합니다. 다시.
문제에 대한 하나의 드라 코닉 해결책이 있습니다 : 하드 메모리 제한을 시행하십시오. 하지만이 일을 시스템 전체 때로는 오히려 여전히 필요 프로세스를 죽일 것입니다, 내가 수동으로해야하는 경우 ulimit
위반하는 프로세스를 시작하기 전에 너무 늦기까지 ... 음, 나는 종종 잊어 것이다.
내가 더 행복 할 수있는 가능한 종류의 솔루션 :
- 프로세스가 특정 메모리 사용량을 초과하면 인위적으로 스로틀되어 나머지 시스템이 응답 상태를 유지합니다.
- 프로세스가 특정 메모리 사용량을 초과하면
SIGSTOP
ped가 종료되므로 다음에 수행 할 작업을 알아볼 시간이 있습니다. - 프로세스가 RAM 한계에 도달 하면 큰 스와핑이 시작 되기 전에 경고가 표시 됩니다.
그러한 행동이나 그와 유사한 것을 얻는 방법이 있습니까?
ulimit
입니다.