우리는 Amazon Linux 머신인 애플리케이션 서버를 조정하려고 합니다...
[myuser@mymachine ~]$ uname -a
Linux mymachine.myco.org 4.3.17-14.25.amzn1.x86_64 #1 SMP Wed May 10 01:58:40 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
우리 머신에는 단 하나의 JBoss 프로세스(우리가 시작한 프로세스)가 실행되고 있습니다. 머신에는 30GB의 메모리가 있으며, 25GB는 Jboss 프로세스에 할당됩니다("-Xmx25600m" Java 옵션 사용). 머신은 언제 스왑 공간을 사용하기 시작합니까? "free -m"을 실행하면 스왑 공간이 사용되는 것을 볼 수 없습니다. 이것이 바로 제가 예상한 것입니다...
[myuser@mymachine ~]$ free -m
total used free shared buffers cached
Mem: 30103 7238 22864 0 172 4438
-/+ buffers/cache: 2627 27475
Swap: 0 0 0
나는 스왑이 메모리가 부족해지기 시작할 때만 사용될 것이라고 생각했지만 반드시 그런 것은 아니라는 말을 들었습니다. 머신은 언제 스왑 공간을 사용하기 시작합니까?
답변1
Linux는 일반적으로 RAM에 항목을 유지하려고 시도하며 사용 가능한 RAM(즉, 애플리케이션, 버퍼 및 캐시 파일에서 사용하는 총 RAM)이 소진된 경우에만 교체를 시작합니다. 그러나 시작 교체를 구성할 수 있으므로 설정에 따라 달라질 수 있으며 이 값으로 제어됩니다 swappiness
. swappiness
현재 설정된 실행값이 무엇인지 확인하세요 .
cat /proc/sys/vm/swappiness
대부분의 시스템에서 기본값은 약 60입니다. 값이 낮을수록 커널은 램에 있는 항목을 더 적극적으로 유지하고 이 값을 0으로 설정하면 스왑이 완전히 비활성화됩니다(스왑은 최대 절전 모드에 사용되지만 런타임 중에는 적극적으로 사용되지 않습니다).
교환 가능성은 시스템의 RAM이 응용 프로그램, 버퍼 및 캐시로 거의 완전히 채워지는 경우에만 적용됩니다. 애플리케이션이 더 많은 메모리를 요청하면 캐시된 데이터를 삭제하거나 덜 사용되는 메모리 중 일부를 디스크에 쓰도록 커널의 기본 설정을 변경합니다. swappiness 값은 둘 사이의 비율을 제어합니다. 여기서 1은 기본적으로 항상 캐시를 삭제하고 100은 대부분의 경우 애플리케이션 데이터를 교환하게 합니다.
다음 명령을 사용하여 시스템의 전환 가능성을 동적으로 구성할 수 있습니다.
sysctl vm.swappiness=10
/etc/sysctl.conf
포함하도록 편집하여 영구적으로 설정합니다.
vm.swappiness = 10
귀하의 서버에 상당한 양의 RAM이 있고 JVM이 그 대부분을 사용하는 경우에는 스왑을 많이 수행하고 싶지 않을 것이므로 이 값을 10 또는 1로 낮추는 것이 도움이 될 수 있습니다. 대용량 메모리를 사용하는 대부분의 최신 시스템의 경우 일반적으로 이 값을 10으로 낮추는 것이 좋습니다.
답변2
실용적인 관점에서 볼 때 Java가 메모리를 처리하는 방식으로 인해 이는 다음과 같이 단순화될 수 있습니다.
"내 서버에는 5GB RAM이 있는데 언제 스왑이 시작되나요?"
이는 임시 파일을 저장하기 위해 tmpfs를 사용할지 여부에 대한 질문이 됩니다. 이는 스왑 공간을 사용할 수 있는 시스템의 또 다른 측면이기 때문입니다(tmpfs는 시스템에 더 많은 메모리가 필요할 때까지 일반 페이지 캐시에 상주하다가 스왑 공간을 시작하게 됩니다). ). 그러나 애플리케이션이 이 기능을 사용하지 않을 가능성이 높으며, 이 경우 일반 작업 중에는 스왑 공간이 필요하지 않을 수 있다고 가정할 수 있습니다(유지 관리를 실행하는 동안 기본 애플리케이션을 종료하면 스왑 공간이 전혀 필요하지 않을 수 있음). 아니요).
즉, 고려해 볼 수도 있습니다.일부혹시라도. 특히, 약간의 비용을 절약하고 싶을 수도 있으므로(Amazon Linux를 실행하고 있으므로 EC2를 사용하고 있으므로 디스크 공간은 단위 시간당 비용이 듭니다) 압축된 메모리를 사용하여 공간을 스왑하는 것이 좋습니다. zram 드라이버(Amazon Linux에 이 드라이버가 포함되어 있는지 100% 확신할 수는 없지만 최소한 모듈로 만들지 않았다면 놀랄 것입니다).
답변3
스왑 파티션은 최대 절전 모드(예: 디스크 일시 중지)에도 사용됩니다. 일부 파일을 교환할 수 있습니다(새 스왑 파일을 채우려면 0을 사용하고 dd
, mkswap
스왑으로 만들려면 ....을 사용하십시오 swapon
).
물론, 컴퓨터가 많은 프로그램을 실행하기 위해 메모리를 사용하고 일부 프로세스가 비활성 상태인 경우에는 스와핑될 수 있으며 이 역시 스와핑을 사용하게 됩니다.