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


314

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

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

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

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


가장 쉬운 방법 은 장치를 재부팅 하고 램에 대처하는 시간을 절약하고 램을 사용하여 랩탑 및 CPU 온도를 절약합니다.
Mohamed Slama 2016.

5
컴퓨터의 모든 항목을 다시 채우는 데는 시간이 덜 걸린다는 큰 가정이 있습니다.
jQwierdy

적어도 우분투 16.04는 스왑 파일을 더 이상 필요로하지 않아도 스왑 파일에 의존함으로써 시스템 순서가 더 느리게 된 후에도 스왑을 계속 사용할 수 있습니다. 따라서 수동 개입이 유용 할 수 있습니다. 재부팅이 항상 옵션은 아닙니다.
매트

답변:


167

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

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

여기 vmstat 1내 컴퓨터가 전혀 바뀌지 않는 것을 볼 수있는 running의 출력 이 있습니다.

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

32
“걱정할 이유가 없습니다”, 교체 된 일부 응용 프로그램을 계속 사용할 때까지. 그러면 모든 지옥이 풀립니다.
törzsmókus

207
이 게시물은 질문에 대답하지 않습니다.
emchristiansen

18
질문의 전제는 오해에 근거합니다. 이 게시물은 오해를 다룹니다.
popey

30
나는 오해를 보지 않고 "사용 된"의 의미에 대해 의견이 일치하지 않습니다. 당신은 적극적으로 스왑 인 / 아웃을 의미하는 "사용됨"을 의미하는 반면, 원래 질문은 "사용됨"으로 제기 된 것으로 나타납니다. 이는 스왑 아웃 된 데이터가 있고 나중에 다시 스왑해야 할 수도 있음을 의미합니다. 다른 많은 메모리를 스왑하는 이벤트 후에 스왑을 플러시하려는 유효한 이유는 본질적으로 사용자가 나중에 발생할 것으로 예상되는 활성 스왑을 선점합니다 (특히 나중에 '스왑 해제'가 발생할 때 다른 이유로 디스크가로드 중입니다).
drfrogsplat

39
메모리를 많이 사용하는 응용 프로그램을 실행 한 후 다른 응용 프로그램은 다른 응용 프로그램으로 전환 할 때 스왑으로 인해 무응답 상태가됩니다. 가능한 한 많은 양의 데이터 (커피 브레이크가 뒤 따름)를 스왑 해제하도록 시스템에 알리는 방법은 Alt + Tab을 할 때마다 20 초를 기다리는 것보다 낫습니다.
Mark K Cowan

423

우분투 기반의 리눅스 커널은 필요에 따라 디스크에서 RAM으로 해당 페이지를 자동으로 "스왑"하므로 일반적으로 자연스럽게 발생한다고 말하고 싶습니다.

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

sudo swapoff -a
sudo swapon -a

또는 한 줄로 또는

swapoff -a; swapon -a

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


8
그 트릭을했고 스왑이 램에 복사되었습니다. 스왑 오프를 실행하기 전에 최소한 프리 램으로 사용되는 스왑의 양이 있어야한다고 생각합니까?
jfoucher

12
스왑이 RAM에 복사되지 않았습니다. 단순히 비활성화되었습니다. 이 작업을 수행하기 전에 상자가 교체되지 않아야합니다. 그렇게하면 커널에 메모리가 사라지고 OOM-Killer가 응용 프로그램을 임의로 종료하기 시작합니다. 이와 같이 스왑을 '청소'해야 할 이유가 없습니다. (내 다른 의견 참조) :)
popey

51
실제로 스왑은 기본적으로 램으로 복사되거나보다 정확하게는 스왑을 비활성화하기 전에 페이지가 디스크에서 RAM으로 다시 스왑됩니다.
SpamapS

14
일부 프로세스에서 여전히 필요한 경우에만 페이지가 RAM에 복사됩니다. 때때로 교체 된 페이지는 이미 완료된 프로세스에 속하며 커널은 이러한 페이지를 즉시 교체에서 제거하지 않습니다.
BrunoJCM

6
이것은 스왑 된 페이지를 다시 RAM으로 가져오고 스왑 메모리를 비우는 방법이므로 정답이어야합니다.
Alfonso Jiménez

144

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

우분투의 기본 설정은 swappiness = 60입니다. swappiness의 기본값을 줄이면 일반적인 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 및 모든 시스템이 원활하게 실행됩니다!

우분투 스왑 FAQ에서 :

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/


1
방금 교환을 설정하는 영구적 인 방법을 포함하도록 답변을 업데이트했습니다. 어떻게 그렇게 많이 평가되지 않았는지 아무도 모릅니다.
Elijah Lynn

1
이 답변에서 swappiness에 대한 더 좋은 독서 => askubuntu.com/a/103916/11929
Elijah Lynn

3
작성자가 원래 답변을 게시했을 때 이것이 사용 가능한지 확실하지 않지만 해당 환경의 성능 사양이 다르기 때문에 우분투 서버 설치에 "60"의 교체 값이 있습니다. help.ubuntu.com/community/…
Frito

1
이 설정은 스왑 크기를 제어하는 ​​데 매우 효과적입니다. 내 시스템에는 16G RAM과 16G 스왑이 있습니다. 때로는 VM을 실행 중이고 일부 응용 프로그램이 스왑 아웃됩니다. VM을 닫으면 RAM 사용량이 줄어들지 만 스왑 사용량은 동일하게 유지되고 애플리케이션 변경시 시스템이 지연됩니다. 교환 성을 변경하면 성능이 향상되었습니다.
kapad

1
이것은 실제로 받아 들여지는 대답이어야합니다. 문제에 대한 철저한 설명과 해결 방법은 물론 스왑 메모리를 유지하는 링크와 솔루션이지만 처음부터 제어 할 수 있도록 도와줍니다. 굉장한 것들. 감사. :)
Jack_Hu

53

스왑을 비우면 디스크 속도가 느리고 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

굉장히 이런 것을 찾고있었습니다. 조금 더 안전하기 위해 숫자와 백분율을 제시 한 다음 절대적으로 확신하도록 요청할 수 있습니다.
Atherion

2
코드를 업데이트하고 요지 기반 gist.github.com/Jekis/6c8fe9dfb999fa76479058e2d769ee5c
Jekis

이것은 스왑을 죽이기 전에 실제로 충분한 RAM이 있는지 확인 해야하는 것처럼 모든 팁을 읽은 후에 도달 한 결론입니다. 선생님 감사합니다. 기본적으로 우분투에 포함되어야합니다 (농담이 아니라 실제로 필수입니다)
Shiki

스왑을 끄고 다시 켜기 전에 새로운 것을 실행하면 메모리가 충분하지 않습니다.
barteks2x

사용 가능한 메모리 양에 따라 다릅니다. 스왑과 새로운 프로세스에 모든 것을 담을 수있는 충분한 여유 메모리가 있다면 아무런 문제가 없습니다. 그렇지 않다면 당신 말이 맞습니다.
Scott Severance

25

주변에 일 처리 후 swappiness 며칠, 나는 커널이 자신의 장치에 남아 있어야 결론에 도달했습니다. 그것은 무엇을하고 있는지 알고 있으며 최상의 경험을 제공하도록 최적화되어 있습니다.

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


2
스왑에 몇 가지 물건이 있었으며 vmstat는 스왑 인과 스왑 아웃이 발생하고 Chrome이 게으르다는 것을 보여 주었고 CPU는 거의 사용하지 않았습니다. 충분한 이유가 있습니까?
Xerus

데스크탑에서 특정 스왑으로 인해 지연되는 경우가 있습니다. (스왑하는 동안이 아니라 나중에 충분한 RAM이있을 때, 오랜 시간 동안.) 따라서이 답변은 경우에 따라 주관적인 경험 일뿐입니다.
Cray

-1

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


10
뭔가하면 그래하지만 되어 교환되고는 않습니다 , 따라서이 질문에 성능에 영향을 미칩니다.
quant

그것은 실제로 말도 안되는 것입니다. 대부분의 대체 대체 스왑은 HDD에 있거나 일반적으로 RAM보다 느린 장치에 있습니다. 공간이 부족하면 인터넷 브라우저와 같이 기존 항목이 스왑 된 다음 느린 장치에서 실제로 사용하고 있습니다. ..
jave.web
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.