it-swarm-ko.tech

여유 RAM이있는 경우 스왑을 비우는 방법은 무엇입니까?

RAM 집약적 인 응용 프로그램 (2GB RAM으로 설정된 VirtualBox)을 열면 일반적으로 당시에 열어 놓은 내용에 따라 일부 스왑 공간이 사용됩니다.

그러나 마지막 응용 프로그램을 종료하면 2GB의 RAM이 (가) 해제되지만 동일한 스왑 공간 사용이 유지됩니다.

예를 들어, VirtualBox를 닫은 후 약 2 시간이 지난 지금 1.6GB의 여유 RAM과 여전히 770MB의 스왑이 있습니다.

스왑 사용을 중지하고 RAM 사용으로 되돌 리도록 Ubuntu에 지시하려면 어떻게해야합니까?

312
jfoucher

스왑이 할당되었다고해서 사용 중이라는 의미는 아닙니다. 시스템 모니터 및 상단과 같은 프로그램은 스왑 공간의 일부 (예 : 770MB)가 표시되어 시스템이 활발하게 스왑 인/아웃한다는 의미는 아닙니다.

스왑 인/아웃이 있는지 확인하려면 vmstat 명령을 사용할 수 있습니다. 몇 초 동안 그대로두고 si (스왑 인) 및 so (스왑 아웃) 열을 확인하십시오. 아무 일도 일어나지 않으면 걱정할 이유가 없습니다.

다음은 vmstat 1 실행 결과입니다. 여기서 내 컴퓨터가 전혀 바뀌지 않는 것을 볼 수 있습니다.

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0
 0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0
 0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0
 1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8
 5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0
 0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0
 0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0

그러나 여기 top에서 스왑 공간이 할당되었음을 알 수 있습니다.

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached
168
popey

Ubuntu의 기본 Linux 커널은 디스크에서 해당 페이지를 필요에 따라 자동으로 RAM으로 "스왑"하므로 일반적으로 자연스럽게 발생한다고합니다.

그러나 실제로 강제해야한다고 생각되면 (나중에 시스템이 응답 할 것인지 알고 싶은 시나리오를 볼 수 있습니다) 순간적으로 스왑을 비활성화하고 다시 활성화 할 수 있습니다

Sudo swapoff -a
Sudo swapon -a

또는 한 줄로 또는

swapoff -a; swapon -a

특히 이미 RAM이 부족한 경우 시스템이 불안정해질 수 있으므로주의하십시오.

418
SpamapS

"스왑"값을 기본값 인 60으로 설정할 수도 있습니다. 이렇게하면 스왑이 너무 커지지 않습니다. 권장 값이 10 인 경우 운송 기본값이 60으로 설정되는 이유는 무엇입니까? buntu SwapFAQ에서 :

우분투의 기본 설정은 swappiness = 60입니다. wappiness의 기본값을 줄이면 일반적인 Ubuntu 데스크탑 설치의 전반적인 성능이 향상 될 것입니다. swappiness = 10의 값을 권장합니다] 그러나 자유롭게 실험 해보십시오.

이 값을 10 또는 0으로 변경하면 드라이브 속도가 느린 구형 시스템에 상당한 속도 향상을 추가 할 수 있습니다. 이 값을 0으로 설정하면 Linux 커널 3.4 이하에서는 스왑이 해제되지 않지만 3.5 이상에서는 가장 낮은 설정으로 유지하려면 값 1을 사용하는 것이 좋습니다 *.

디스크에 충돌하는 것이 RAM보다 느리기 때문에 이것을 0으로 설정하지 않을 이유가 없습니다. 8 개의 가상 코어, 빠른 SSD 및 8GB의 메모리가 있고 스왑은 0으로 설정되어 있습니다.이 시점에서 3 개의 가상 머신이 실행 중이고 메모리 사용량은 7.7GB의 7.1이며 사용 된 스왑은 576KB에 불과합니다. 952MB 및 모든 시스템이 원활하게 실행됩니다!

buntu SwapFAQ에서 :

Swappiness 매개 변수는 커널이 프로세스를 실제 메모리에서 스왑 디스크로 옮기는 경향을 제어합니다. 디스크가 RAM보다 속도가 느리기 때문에 프로세스가 메모리에서 너무 적극적으로 이동하면 시스템 및 응용 프로그램의 응답 시간이 느려질 수 있습니다.

  1. swappiness는 0에서 100 사이의 값을 가질 수 있습니다
  2. swappiness = 0은 가능한 한 오랫동안 물리적 메모리에서 프로세스를 교환하지 않도록 커널에 지시합니다.
  3. swappiness = 100은 커널에게 물리적 메모리에서 프로세스를 적극적으로 교환하고 캐시를 교환하도록 이동시킵니다

아래는 교환 교환 확인, 교환 비우기 및 교환 교환을 0으로 변경하는 기본 지침입니다.

교환 가치를 확인하려면 :

cat /proc/sys/vm/swappiness

스왑을 일시적으로 0으로 설정하려면 ( SpamapS에서 제안한대로 ) :

이것은 스왑을 비우고 모든 스왑을 메모리로 다시 전송합니다. 먼저 gnome-system-monitor의 자원 탭을 통해 사용 가능한 메모리가 충분한 지 확인하십시오. 사용 가능한 메모리는 사용 된 스왑보다 커야합니다 이 프로세스는 다소 시간이 걸릴 수 있습니다. gnome-system-monitor를 사용하여 진행 상황을 모니터링하고 확인하십시오.

Sudo swapoff --all

새 값을 0으로 설정하려면

Sudo sysctl vm.swappiness=0 

스왑을 다시 켜려면

Sudo swapon --all

Swappiness를 0으로 영구적으로 설정하려면 다음을 수행하십시오.

  1. sudoedit /etc/sysctl.conf
  2. 이 줄을 추가하십시오 vm.swappiness = 0
  3. Sudo shutdown -r now # 시스템 재시작

* 커널 버전 3.5 이상에서는 swappiness를 0으로 설정하면 완전히 꺼지고 가장 낮은 swappiness 알고리즘을 원하면 1로 설정하는 것이 좋습니다. 출처 : https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

144
Elijah Lynn

스왑을 비우면 디스크 속도가 느리고 RAM이 제한된 시스템에서 많은 도움이 될 수 있습니다. 물론 이미 언급했듯이 Sudo swapoff -a; Sudo swapon -a를 실행하는 방법입니다. 여기서 문제는 RAM이 충분하지 않으면 모든 종류의 문제가 발생할 수 있다는 것입니다.

지난 몇 년 동안 저에게 도움이 된 toggle_swap라는 스크립트를 작성했습니다. 실제로 스왑을 비활성화하기 전에 사용 가능한 RAM이 (가) 충분한 지 확인합니다. 여기있어:

#!/bin/bash

free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print $4}')"
buffers="$(echo "$mem_data" | awk '{print $6}')"
cache="$(echo "$mem_data" | awk '{print $7}')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"

echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
Elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    Sudo swapoff -a
    Sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi
53
Scott Severance

며칠 동안 swappiness 으로 둘러 본 후 커널을 자체 장치에 두어야한다는 결론에 도달했습니다. 그것은 무엇을하고 있는지 알고 있으며 최상의 경험을 제공하도록 최적화되어 있습니다.

디스크를 다시 돌려야 할 충분한 이유가 없다면, 그대로 두겠습니다.

26
Erigami

스왑 공간이 사용되는 경우 성능에 영향을 미치지 않습니다. 성능상의 유일한 단점은 물건이 스왑에 들어가거나 나가는 것입니다. 스왑 인/스왑 아웃 된 것이 없다면 걱정할 필요가 없습니다.

0
Rory