스왑 파티션이 /dev/sda1
있습니다. 그것은 2GB
크기이며 최대 절전 모드로 사용하고 싶습니다. 내 시스템에는 4GB
RAM이 있습니다. RAM이 부족하면 커널이 스와핑을 시작하고 응용 프로그램을 종료하기 위해 tty로 전환 할 수도 없습니다. OOM 상태가 아닌 최대 절전 모드에만 스왑을 사용하고 싶습니다. 그래서 나는 OOM 킬러가 항상 교환하지 않고 일부 응용 프로그램을 죽이기를 원합니다. 설정 vm.swappiness=0
했지만 도움이되지 않습니다. 어떤 솔루션?
답변
솔루션이 직접 요청한 것은 아니지만 몇 가지 시도해 볼 수 있습니다.
주석에서 말했듯이 설정 vm.swappiness=0
은 커널을 스왑을 사용하기 전에 가능한 한 오래 기다릴 수있게하고 완전히 끄지 않습니다. 나는 이것에 대한 증거는 없지만 vm.swappiness=0
당신 을 설정 함으로써 문제가 악화 되고 있다고 생각합니다 .
이것이 사실이라고 생각하는 이유는 커널이 스와핑을 시작하게 만드는 무언가가 발생하면 아마도 모든 것을 정말 빠르게 스왑해야 할 것입니다. 하드 드라이브가 작동하는 속도 때문에 할 수없는 것입니다. 커널이 스왑 할시기를 선택하게하면, 이전에 덜 사용되는 데이터 스왑이 시작되고, 상황이 거칠어지면 한 번에 스왑하기 위해 RAM에서 많은 데이터를 이동할 필요가 없습니다. 일반적으로 이것은 커널 효율성을 증가시킵니다.
최대 절전 모드를 트리거 할 때 이러한 특정 이유로 생성 된 스왑 파티션 또는 스왑 파일을 사용 swapon
하고 swapoff
활성화 하는 스크립트를 만들 수도 있습니다 . 대부분의 창 관리자는 최대 절전 모드 버튼과 같이 스크립트의 다른 부분이 활성화 될 때 스크립트를 실행하도록 사용자 지정할 수 있습니다. 이 작업을 수행하는 방법은 사용하는 창 관리자에 따라 다릅니다.
세 번째 옵션은 스왑을 항상 활성화하고 대신 OOM 관리자가 활성화되고 강제 종료 프로세스를 시작하기 전에 사용할 수있는 RAM의 양을 줄이는 것입니다. 이것은 가능하지만 어떻게 해야할지 모르겠습니다.
마지막으로 요즘의 RAM 비용을 고려할 때 컴퓨터의 RAM 양을 늘리는 것도 이미 최대치 않은 경우 실행 가능한 옵션입니다.
답변
루트의 crontab에 다음을 추가하여 해결 방법을 사용했습니다.
*/5 * * * * /sbin/swapoff -a && /sbin/swapon -a
최상의 솔루션은 아니지만 스왑 사용량을 최소한으로 유지합니다. 다른 솔루션을 사용하려고 시도했기 때문에 최상의 결과를 얻었습니다.
또 다른 방법은 일시 중지 / 웨이크 업에 사용자 정의 스크립트를 사용하는 것이지만 우분투 (스왑 오프시 깨우기, 최대 절전 모드 전에 교체)로 작동시키는 방법을 찾지 못했습니다.