vm.swappiness는 Linux의 동적 속성입니까?

vm.swappiness는 Linux의 동적 속성입니까?

내 컴퓨터 중 하나는 약 120GB 또는 250GB의 RAM을 소비합니다. 스왑 수준은 60이며 이는 약 100GB의 스왑이 발생함을 의미합니다. echo 1 > /proc/sys/vm/swappiness/를 통해 swappiness 설정을 업데이트했습니다. 하지만 여전히 스왑 공간이 사용되고 있는 것을 볼 수 있습니다.

이를 적용하려면 컴퓨터/프로세스를 다시 시작해야 합니까?

답변1

값은 동적으로 적용되지만 값 외에도 다음과 같은 몇 가지 사항을 고려해야 합니다.

  1. Linux는 데이터를 적절하게 스왑하지만(즉, RAM이 가득 차기 전에 스왑에서 데이터를 밀어내기 시작함) 요청 시에만 데이터를 스왑합니다(따라서 실제로 필요한 데이터만 가져옵니다).

  2. 데이터가 다시 스왑된 후에도 프로그램이 종료될 때까지 복사본은 스왑에 남아 있습니다. 이론적으로 이는 가상 메모리 하위 시스템이 스래싱(즉, 실행 중인 모든 것이 메모리에 맞지 않기 때문에 끊임없이 스왑 안팎으로 데이터를 이동하는 경우)할 때 시스템 성능을 향상시킬 수 있습니다. 교환을 위해 데이터를 다시 내보냅니다. 교환됩니다.

  3. 사례 1과 2가 모두 해당되지 않더라도 교환에서 데이터를 다시 이동하는 데 시간이 걸리기 때문에 시스템은 변경 사항에 즉시 눈에 띄게 반응하지 않습니다.

이제 이 모든 것 외에도 고려해야 할 또 다른 사항이 있습니다. 즉, 메모리가 부족해지기 전에 시스템을 교체하는 것이 합법적인 문제가 된다는 것입니다. 대부분의 경우 이는 다음 세 가지 중 하나를 의미합니다.

  • 일부 프로그램의 메모리 사용량을 제한하기 위해 메모리 제어 그룹을 사용하고 있으며 그 중 일부는 제어 그룹의 제한에 도달했습니다.
  • 많은 수의 파일이 캐시되어 있고 시스템이 어떤 이유로 메모리를 확보하기 위해 캐시에서 제거하는 것을 꺼려합니다.
  • 매우 활동적인 것은 많은 메모리를 할당하지만(아마도 거대한 페이지 사용) 실제로는 사용하지 않습니다.

첫 번째 경우에는 튜닝이 /proc/sys/vm/swappiness도움이 되지 않습니다. 제어 그룹에 설정된 메모리 제한을 보고 조정해야 합니다(또는 실행 중인 애플리케이션을 보고 어떤 애플리케이션이 필요하다고 생각하는 것보다 더 많은 RAM을 사용하고 있는지 알아보세요). .

두 번째 경우에는 값을 늘리는 것이 /proc/sys/vm/vfs_cache_pressure값을 줄이는 것보다 더 나은 결과를 제공할 수 있습니다. /proc/sys/vm/swappiness sysctl은 vfs_cache_pressure시스템이 페이지 캐시에서 공간을 얼마나 적극적으로 회수하는지 제어합니다. 백분율로 표시되며 기본값은 100입니다. 나는 그것을 200으로 올리면 일반적으로 커널이 실제로 다른 메모리 사용에 더 관심이 있다고 믿게 된다는 것을 발견했습니다. 그러나 이 값을 너무 높게 설정하면 전체 성능에 부정적인 영향을 미칠 수 있습니다. 캐시를 축소할 수 없을 때 캐시를 축소하는 데 시간이 낭비되기 때문입니다.

세 번째 경우는 문제의 프로그램에 문제가 있는 경우이며, 대부분의 경우 개발자에게 불만을 제기하는 것 외에는 할 수 있는 일이 별로 없습니다.

관련 정보