스왑이 사용되는 것을 방지하려면 얼마나 많은 RAM이 필요합니까?

스왑이 사용되는 것을 방지하려면 얼마나 많은 RAM이 필요합니까?

내 시스템에는 항상 사용 가능한 "사용 가능한" 메모리와 "비활성" 메모리가 있지만 때때로 시스템이 스왑을 위해 몇 메가바이트를 이동합니다. 아마도 1박당 약 100MB 정도일 것입니다. 하지만 며칠 동안 스왑하면 4000MB가 넘을 수 있습니다.

시스템에 필요한 메모리를 어떻게 결정합니까?

답변1

FreeBSD메모리를 5개의 목록으로 나누기:

  • 유선(메모리에 잠겨 있으며 페이징할 수 없음)
  • 활성(최근 사용됨)
  • 비활성(최근에 사용되지 않음)
  • 은닉처
  • 무료

그들 중 일부는최소 무료그리고무료 대상수준, 예를 들어

Pool     Minimum Target
Free       0.7%    3%
Cache      3%      6%
Inactive   0%      4.5%

(원천:FreeBSD 운영체제의 설계 및 구현》, 상당히 오래된 내용: 2004년 FreeBSD 5.2를 다루고 있습니다. 그 이후로 숫자는 변경되었지만 일반적인 접근 방식은 그렇지 않다고 생각합니다. )

페이지 데몬의 임무는 레벨을 유지하고 필요에 따라 페이지를 가져오는 것입니다.

여기 내 FreeBSD 9.0 VM에서 관련 숫자는 다음과 같습니다.

hw.availpages: 3138511
vm.stats.vm.v_inactive_target: 121342     # 3.9%
vm.stats.vm.v_free_target: 80895          # 2.6%
vm.stats.vm.v_free_reserved: 4011         # 0.1%
vm.stats.vm.v_free_min: 19221             # 0.6%
vm.stats.vm.v_cache_min: 80895            # 2.6%
vm.stats.vm.v_cache_max: 161790           # 5.1%

(어떻게 계산되는지는 잘 모르겠습니다. 물리적 메모리에 따라 달라지는 것 같습니다 kern.maxusers.)

FreeBSD사용 가능한 캐시를 늘리기 위해 적극적으로 페이징됩니다.따라서 스왑을 사용한다고 해서 시스템이 스트레스를 받고 있다는 의미는 아닙니다. 페이징 속도와 기타 로드 메트릭(예: 디스크 I/O 및 CPU 틱)을 확인(및 그래프!)하는 것이 훨씬 더 유용합니다. systat -io이것이 시작입니다. Locate/updatedb를 실행하는 것은 밤새 메모리 사용량을 바꾸는 좋은 방법입니다.

사용 가능한 메모리가 있는 경우에도 스왑을 사용하는 것은 정상적인 동작이며 여유 메모리가 있을 때 발생할 수 있는 메모리 요구 사항에 효과적으로 대비하므로 스왑만 사용하는 것은 RAM 요구 사항을 결정하는 신뢰할 수 있는 방법이 아닙니다. FreeBSD는 조정이 필요한 시기를 알려주는 데 매우 능숙합니다(grep "see adjusts in file" messages).

기타 유용한 자료:

답변2

여유 메모리가 있는 경우 메모리를 늘려도 효과가 없으므로 매개변수를 변경해야 합니다 swappiness. 비물리적 메모리(스왑)를 얼마나 자주 사용하는지 커널에 알려줍니다.

교환 가치를 확인하세요.

cat /proc/sys/vm/swappiness

임시 swappiness 값(재부팅 시 손실됨)을 10(스왑 사용량을 줄이는 데 좋은 값)으로 변경합니다.

sudo sysctl vm.swappiness=10

영구적으로 변경하려면 구성 파일을 사용하십시오.

sudo vim /etc/sysctl.conf

검색하여 vm.swappiness원하는 값으로 변경하세요.

vm.swappiness=10

저장하고 다시 시작하세요.


설명하다:

스위치란 무엇입니까?

swappiness 매개변수는 프로세스를 물리적 메모리에서 스왑 디스크로 이동하는 커널의 경향을 제어합니다. 디스크는 RAM보다 훨씬 느리기 때문에 프로세스를 메모리 밖으로 너무 자주 이동하면 시스템 및 애플리케이션 응답 시간이 느려질 수 있습니다.

교환성 값은 0에서 100 사이일 수 있습니다.

swappiness=0은 가능한 한 오랫동안 물리적 메모리에서 프로세스를 스와핑하지 않도록 커널에 지시합니다.

swappiness=100은 커널이 물리적 메모리에서 프로세스를 적극적으로 스왑하여 스왑 캐시로 이동하도록 지시합니다.

우분투의 기본 설정은 swappiness=60입니다. swappiness의 기본값을 낮추면 일반적인 Ubuntu 데스크탑 설치의 전반적인 성능이 향상될 수 있습니다. swappiness=10 값이 권장되지만 자유롭게 실험해 보세요. 참고: Ubuntu 서버 설치에는 데스크탑 시스템과 성능 요구 사항이 다르므로 기본값인 60이 더 적합할 수 있습니다.

답변3

간략한 연구에서는 다음과 같이 지적합니다.기본적으로 swappiness가 60으로 설정되어 있는 이유는 무엇입니까? 교환성은 다음에 더 자세히 설명되어 있습니다.

이: https://www.kernel.org/doc/Documentation/sysctl/vm.txt 모든 vm 관련 매개변수가 여기에 설명되어 있습니다. 단일 프로세스 메모리 관리를 좋아한다면 다른 메모리 관련 제한/매개변수를 이해하는 데 도움이 될 수 있습니다.

답변4

이전 답변은 freeBSD에는 적용되지 않지만 그대로 두겠습니다. 나는 그것을 테스트했고 데비안에서는 매력처럼 작동합니다. freeBSD의 경우 다음 명령을 사용하여 sysctl스왑이 활성화되어 있는지 확인할 수 있습니다.

-bash-2.05b$ sysctl vm.swap_enabled
  vm.swap_enabled: 1

1 - 활성화됨

0 - 비활성화됨

다음 줄을 작성하여 비활성화할 수 있습니다 /etc/sysctl.conf.

vm.swap_enabled=0

그리고이 링크스왑 및 물리적 메모리에 대한 자세한 정보를 얻을 수 있습니다.

관련 정보