대부분의 경우 교환 = 나쁜 것으로 생각하고 교환을 줄이지 않으면 시스템이 실제로 필요하지 않을 때 교환합니다. 둘 다 사실이 아닙니다. 사람들은 스와핑을 시스템이 다운되는 시간과 연관 시키지만 시스템은 다른 방식이 아닌 스왑 다운 되기 때문에 스와핑 됩니다. 시스템을 교체 할 때 이미 교체 비용을 결정할 때 성능 비용을 고려했으며, 그렇게하지 않으면 시스템 성능이나 안정성에 전반적으로 더 큰 불이익이있을 것이라고 결정했습니다.
전반적으로 기본 설정은 전반적인 성능과 안정성을 향상시킵니다. 기본값을 그대로 두는 것이 좋습니다. 리눅스가 메모리 관리를 개선하여 일부 경우를 해결하는 방법이 더 있지만 대체로 스왑 피스 제어는 좋은 해결 방법이 아닙니다. 한 방향으로 조정하면 문제를 해결하고 다른 문제를 만들 수 있습니다. 가능하면 더 많은 실제 RAM을 설치하고 스왑 피스 만 남겨두면 다른 모든 해결 방법이 사라집니다.
리눅스가 RAM을 사용하는 방법
응용 프로그램에서 사용하지 않는 RAM은 "캐시"로 사용될 수 있습니다. 캐시는 빠르고 부드러운 실행 시스템에 중요하며 디스크 읽기 및 쓰기 속도를 모두 높여줍니다.
응용 프로그램이 거의 모든 RAM을 사용하는 시점까지 메모리 사용을 늘리면 캐시가 줄어들고 결과적으로 평균 디스크 작업 속도가 느려집니다. 요즘 캐시에는 수십 메가 바이트 이하로 충분하지 않습니다.
스왑 공간이 없다고 가정 할 때 응용 프로그램의 메모리 사용이 더 늘어날 경우 캐시 공간이 부족할뿐만 아니라 결국 메모리가 부족하게되어 시스템에서 실행중인 프로세스를 종료해야합니다. 프로세스를 죽이는 것은 불안정하고 예측할 수없는 시스템을 제공하기 때문에 속도 저하보다 더 나쁩니다.
리눅스가 스왑을 사용하는 방법
이러한 두 가지 문제를 해결하기 위해 시스템은 거의 사용하지 않는 일부 응용 프로그램 메모리를 디스크의 스왑 공간에 다시 할당하여 RAM을 비울 수 있습니다. 추가 RAM을 사용하면 메모리 부족으로 인해 프로세스가 종료되는 것을 막을 수 있으며 약간의 캐시를 회수하여 디스크 작업이보다 원활하게 작동 할 수 있습니다.
이 재 할당은 명확한 컷오프에 따라 수행되지 않습니다. Linux가 스와핑을 시작한 후 일정 비율의 할당에 도달하지 않습니다. "퍼지"알고리즘이 있습니다. "메모리 할당에 대한 압력이 얼마나 많은지"에 의해 가장 잘 설명 할 수있는 많은 것들이 고려됩니다. 새 메모리를 할당해야하는 "압력"이 많으면 더 많은 공간을 확보하기 위해 일부 메모리를 교체 할 가능성이 높아집니다. "압력"이 적 으면 이러한 기회가 줄어 듭니다.
시스템에는 "스왑"설정이있어이 "압력"계산 방법을 조정할 수 있습니다. 종종 "RAM의 백분율"로 잘못 표시되지만, 공식의 일부로 사용되는 값이 아닙니다. 40에서 60 사이의 값이 권장되는 정상 값이며, 현재 60은 기본값입니다.
RAM이 많더라도 시스템을 교체해야하는 것은 전반적으로 매우 좋은 일입니다. 시스템을 교체해야하는 경우 일시적으로 (많은 메모리를 사용하는 짧은 프로세스를 실행하는 동안) 메모리 부족 상황에 처하게되면 시스템이 모든 것을 계속 실행할 수있는 두 번째 기회를 갖게됩니다. 스와핑을 완전히 비활성화하지 않으면 메모리를 할당 할 수 없어 프로세스가 종료 될 위험이 있습니다.
시스템이 다운되거나 크게 스왑되면 어떻게됩니까?
스와핑은 느리고 비용이 많이 드는 작업이므로 시스템은 캐시 성능의 균형이 전체적으로 보상을 받거나 프로세스 종료를 피해야하는 경우를 계산하지 않는 한이를 피합니다.
많은 사람들이 디스크를 많이 쓰러 뜨리고 많은 스왑 공간을 사용하고 스왑을 비난하는 시스템을 살펴볼 것입니다. 그것은 잘못된 접근 방식입니다. 스와핑이이 극한에 도달하면 스와핑이 문제의 원인이 아니라 메모리 부족 문제를 해결하려는 시스템의 시도이며, 스왑하지 않으면 실행중인 프로세스를 스와핑하지 않고 임의로 죽는다는 의미입니다.
데스크탑 시스템은 어떻습니까? 다른 접근 방식이 필요하지 않습니까?
데스크탑 시스템 사용자는 실제로 응용 프로그램 열기와 같이 사용자가 시작한 작업에 대한 응답으로 시스템이 "응답 감"을 기대합니다. 이는 필요한 메모리 증가로 인해 때때로 스왑을 트리거 할 수있는 작업 유형입니다.
일부 사람들이이를 조정하려는 한 가지 방법은 메모리를 사용하고 캐시 공간이 부족한 상태에서 응용 프로그램에 대한 시스템의 허용 오차를 높일 수있는 swappiness 매개 변수를 줄이는 것입니다.
그러나 이것은 단지 목표를 바꾸는 것입니다. 첫 번째 응용 프로그램은 이제 스왑 작업없이로드 될 수 있지만 다음에로드되는 응용 프로그램의 경우 여유가 줄어 듭니다. 다음에 애플리케이션을 대신 열 때 동일한 스와핑이 나중에 발생할 수 있습니다. 그 동안 캐시 크기가 줄어들어 시스템 성능이 전반적으로 저하됩니다. 따라서 감소 된 스와 피 니스 설정의 이점은 측정하기 어려울 수 있으며, 때때로 스와핑 지연을 줄이지 만 다른 시간에는 다른 성능 저하를 유발할 수 있습니다. 수행중인 작업을 알고 있으면 스왑을 줄이는 것이 정당화 될 수 있지만 10 %로 줄이면 시스템이 매우 작은 캐시 크기에 견딜 수 있고 시스템이 짧은 통지로 스왑해야 할 가능성이 높아집니다.
프로세스가 충돌하거나 종료 될 수있는 메모리 부족 조건에 대한 추가 보호 기능을 상실하므로 스왑을 완전히 비활성화하지 마십시오.
지금까지 가장 효과적인 해결책은 여유가있는 경우 더 많은 RAM을 설치하는 것입니다.
어쨌든 많은 RAM이있는 시스템에서 스왑을 비활성화 할 수 있습니까?
응용 프로그램에 필요한 것보다 훨씬 많은 RAM이 있다면 스왑이 거의 필요하지 않습니다. 스왑을 비활성화하면 대부분의 시간에 차이가 없을 것입니다. 그러나 충분한 RAM이 있다면 스왑을 활성화 상태로두면 시스템이 필요하지 않을 때 스왑되지 않기 때문에 페널티가 없습니다.
차이가 생길 수있는 유일한 상황 은 시스템에 메모리 부족이 발생하여 캐시 시스템이 방해를받는 경우가 거의 없을 것이며, 이런 상황에서는 스왑을 가장 많이 원합니다 . 따라서 메모리가 충분할 때 부정적인 영향을주지 않고 안심하고 사용할 수 있도록 정상 설정으로 스왑을 안전하게 유지할 수 있습니다.
그러나 스왑은 어떻게 시스템 속도를 높일 수 있습니까? 스와핑이 느려지지 않습니까?
RAM에서 스왑으로 데이터를 전송하는 작업은 느리게 진행되지만, 합리적인 캐시 크기를 유지 한 결과로 커널이 전반적인 이점을 능가하는 것이 확실한 경우에만 수행됩니다.
데이터가 교환되면 언제 다시 나옵니까?
메모리의 주어진 부분은 읽거나 쓰는 즉시 사용되는 즉시 스왑에서 나옵니다. 그러나 일반적으로 스왑되는 메모리는 오랫동안 액세스하지 않았으며 곧 필요하지 않을 메모리입니다.
스왑 외부로 데이터를 전송하는 작업은 스왑 외부로 전송하는 것만 큼 시간이 많이 걸립니다. 커널은 필요하지 않은 경우 데이터를 제거하지 않습니다. 데이터가 스왑 중이고 사용되지 않는 동안 사용중인 다른 것들에 대한 더 많은 메모리 와 더 많은 시스템 캐시 가 남습니다 .
교환 율 감소가 적절한 경우가 있습니까?
예. 시스템 캐시의 이점이없는 하나의 특정 서버 응용 프로그램 전용 서버를 실행하는 경우 Oracle 서버, MySQL / MariaDB와 같은 일부 데이터베이스 서버는 이러한 데이터베이스 엔진이 자체 캐싱을 사용하므로 스왑을 1에서 10으로 줄이는 것을 권장합니다.
이것은 시스템이 하나의 작업에만 전념하고 MySQL / MariaDB의 경우에만 MyISAM 또는 Aria 등이 아닌 순수 InnoDB 또는 XtraDB를 사용하는 경우에만 해당됩니다.