내 시스템에는 항상 사용 가능한 "사용 가능한" 메모리와 "비활성" 메모리가 있지만 때때로 시스템이 스왑을 위해 몇 메가바이트를 이동합니다. 아마도 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
그리고이 링크스왑 및 물리적 메모리에 대한 자세한 정보를 얻을 수 있습니다.