행정상 개요
스왑 영역 (스왑 파티션, 스왑 파일 또는 페이지 파일이라고 함)은 OS가 처리 할 수있는 실제 메모리를 늘리는 메커니즘 일뿐입니다.
사용 가능한 실제 RAM이 부족하고 오늘날의 컴퓨터에서 4GB 이하의 RAM이 있는지 말씀 드리겠습니다. 그렇다면 아마도 스왑이 있어야합니다. 그러나 이것은 작업량과 컴퓨터 사용 방법에 따라 다릅니다.
4GB 이상의 RAM이 있으면 시스템이 스왑을 사용하지 않을 가능성이 높습니다. 따라서 스왑이 활성화되어 있는지 여부는 크게 변하지 않습니다.
이것은 다른 요소에 따라 다르지만, 시스템이 오래 실행 될수록 OS가 사용하지 않는 RAM의 작은 부분을 스왑 이벤트로 스왑 할 가능성이 높아지지만 분명히 많은 공간이 남아 있습니다. 그러나 종종 시스템은 파일 버퍼 및 기타 작업에 "사용 가능한"RAM을 사용하며 일부 워크로드로 인해 파일 버퍼가 사용 가능한 모든 RAM을 사용할 수 있습니다.
배경 정보
스왑을 비활성화하고 메모리가 완전히 사용되면 어떻게 될까요? 다음에 응용 프로그램이 더 많은 메모리를 요청하면 (예 : malloc 또는 realloc) 오류가 발생합니다! 올바르게 코딩 된 경우 응용 프로그램에서이를 감지하지만 이러한 오류를 처리하고 프로그램을 정상적으로 종료하는 것은 여전히 어려운 과제입니다. 그러나 많은 개발자는 성공적인 메모리 할당을 테스트하지 않으며이 비 할당 된 메모리를 사용하자마자 응용 프로그램이 충돌하는 경우가 많습니다. 따라서 응용 프로그램이 중단 될 가능성이 높으며 일반적으로 동시에 두 개 이상의 응용 프로그램이 실행되기 때문에 많은 응용 프로그램이 중단 될 수 있습니다. 바라건대, 커널 자체는 면역이되어야하지만 내 경험상 항상 그런 것은 아닙니다.
스왑이있는 경우, 동일한 동작을해야합니다 , 하지만 기회는 당신이 그 한계에 도달하지 않습니다 그래서 당신은 더 높은 제한이 있습니다.
8GB와 16GB의 RAM이있는 개인적으로 2 대의 컴퓨터가 있습니다. 이 컴퓨터를 개인적으로 사용하면 절대로이 RAM을 모두 사용할 수 있습니다 (오늘! 몇 년 후에는 다를 수 있음). 물리적 RAM 한계에 도달하는 유일한 이유는 프로세스에 불량이 발생하여 모든 RAM을 사용하고 있기 때문입니다. 스왑이없는 것은 안심입니다. 커널은 RAM 한계에 도달하자마자 불량 프로세스를 즉시 종료합니다. 스왑을 사용하면 시스템이 스왑 및 스왑 및 스왑되고 커널이 범인을 죽일 때까지 때로는 완전히 응답하지 않기 때문에 고통스러운 경험을 얻을 수 있습니다 (SSD에는 아닐 수도 있습니다 ...).
조언
스왑을 제거하면 끔찍하게 잘못된 일이 발생할 수 있다고 말하는 사람들에 의해 두려워해서는 안됩니다. 그렇게하면 4GB의 RAM에서 2GB로 이동하는 것처럼 물리적 주소 공간이 줄어 듭니다. 그런 일을 하시겠습니까? 그런 다음 스왑을 제거해서는 안됩니다. 그러나 당신은 그것을 제한하기로 결정할 수 있으며 그것은 현명 할 것 입니다.
워크로드가 사용 가능한 실제 RAM보다 가까이 또는 더 많은 공간을 사용하게하거나 많은 I / O (디스크에 읽기 / 쓰기)가 필요한 경우 스왑을 유지해야합니다.
스왑을 유지해야하는 경우 사용자는 프로세스가 사용할 수있는 메모리 양으로 제한을 설정해야합니다. Linux 시스템에서는 cgroups 메모리 제한을 사용하여 일부 프로세스가 제어되지 않는 것을 피할 수 있습니다 .OS X의 해당 기능을 모르지만 그렇게해야합니다.
그러나 워크로드에 사용 가능한 메모리가 충분하면 스왑을 안전하게 비활성화하거나 유지할 수 있습니다. 시스템이 스왑을 사용하지 않으면 성능 저하 (특히 오래된 회전식 하드 디스크에서는 볼 수 있고 SSD에서는 덜 표시됨)에 영향을받지 않기 때문에 성능면에서도 크게 변하지 않습니다.
사용 가능한 RAM이 충분한 경우 프로세스 또는 프로세스 그룹당 메모리 제한을 설정하기 위해 위와 동일한 트릭을 사용하는 것이 좋습니다.
내 예
RAM이 1GB 인 오래된 PC가 있으며 큰 스왑이 있습니다 .4GB이므로 Firefox 및 기타 응용 프로그램을 실행할 수 있습니다. 그래도 올바른 사용자 경험을 제공하기 위해 가능한 적은 응용 프로그램 (또는 Firefox의 탭)을 사용하는 경향이 있습니다.
RAM이 8GB 인 작은 서버가 있습니다. 나는 내 작업 부하를 정확하게 알고 있으며 프로세스가 불량하고 모든 메모리를 소비하기 때문에 서버 속도가 느려지 는 것을 원하지 않습니다 . 장벽을 적용하는 스왑 및 cgroup 메모리 제한이 없으므로 응용 프로그램이나 서비스가 충돌 할 수는 있지만 커널은 충돌 할 수 없습니다. Btw, 이것은 Linux 컴퓨터입니다.
그런 다음 16GB RAM의 Mac이 있습니다. 나는 그것의 유일한 사용자가 아니며, 우리는 사용자를 전환 할 때 기다리는 것을 신경 쓰지 않을 것입니다. 스왑이 있기 때문에이 컴퓨터의 다른 사용자의 작업로드를 계획하기가 어렵습니다. 내가 유일하게 스왑을 사용하더라도. 필자는 종종 여러 VM을 실행하고 메모리 소비 응용 프로그램을 사용하지만 동시에 사용하지는 않기 때문에 사용하지 않는 앱에서 OS 스왑을 신경 쓰지 않으므로 디스크 I / O를 더 빨리 얻거나 다른 VM을 시작할 수 있습니다. 지금까지이 기계가 바뀌는 것을 보지 못했습니다!