때로는 동시에 너무 많은 프로그램/프로세스를 실행한 후 컴퓨터가 느리게 실행되기 시작하고 때로는 거의 충돌/멈추는 것처럼 보입니다. Debian Linux를 사용하면 메모리가 부족해 원활하게 실행되기 전에 일부 프로세스를 자동으로 종료할 수 있는 방법이 있습니까?
답변1
기본적으로 사용 가능한 메모리를 모니터링하는 데몬이 필요하며, 주어진 임계값 아래로 떨어지면 일부 프로세스를 선택하고 종료하여 일부 메모리를 확보합니다.
while (true) {
size_t free_memory = get_free_memory();
if (free_memory < free_memory_threshold) {
pid_t pid = choose_a_process_to_kill();
kill(pid, SIGTERM);
}
}
분명한 질문은 종료할 프로세스를 선택하는 방법입니다. 간단한 대답은 가장 큰 메모리 사용량을 갖는 프로세스입니다. 이는 오작동하는 "메모리 호그"일 가능성이 높으며 해당 프로세스를 종료하면 다른 많은 프로세스에 충분한 메모리가 확보됩니다.
그러나 더 근본적인 질문은 다음과 같습니다. 다른 프로세스를 위한 메모리를 확보하기 위해 그러한 프로세스를 종료하는 것이 정말 괜찮은가요? 대규모 프로세스가 무엇인지 어떻게 알 수 있나요?그다지 중요하지 않다다른 사람들과 비교하면? 일반적인 대답은 없습니다. 또한 나중에 그 큰 프로세스를 다시 실행하려고 하면 다른 많은 프로세스가 종료되도록 허용하시겠습니까? 그렇게 했다면 그런 일은 없었을 텐데무한한 복수의 순환?
실제로 가상 메모리 메커니즘은 이미 유사한 기능을 수행합니다. 프로세스를 죽이는 대신,교체하다다른 사람이 사용할 수 있도록 메모리의 일부를 디스크에 복사합니다. 이전 프로세스가 나중에 해당 메모리 부분을 사용하려고 하면 가상 메모리 메커니즘이교환페이지가 돌아옵니다. 이런 일이 발생하면 다양한 프로세스에서 분쟁이 발생합니다(이를 소위이기다), 메모리를 확보하려면 일부 프로세스를 종료해야 합니다. 더 좋은 방법은 더 많은 메모리를 사용할 수 있도록 하는 것입니다. 시스템이 시작될 때