충분한 여유 RAM이 있어도 스왑이 사용되는 이유는 무엇입니까? 임시 스토리지 안전망 역할을하는 것이지만 때때로 3GB의

스왑의 본질은 RAM이 가득 찼을 때 임시 스토리지 안전망 역할을하는 것이지만 때때로 3GB의 여유 RAM이 있어도 스왑 파티션이 계속 사용되고 있습니다. 이것이 정상입니까?



답변

“스왑”값을 변경해보십시오.

보내는 사람 우분투의 스왑 자주 묻는 질문 :

교환이란 무엇이며 어떻게 변경합니까?

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

  1. swappiness는 0에서 100 사이의 값을 가질 수 있습니다

  2. swappiness = 0은 가능한 한 오랫동안 물리적 메모리에서 프로세스를 교환하지 않도록 커널에 지시합니다. 커널 버전 3.5 이상에서는 스왑 성을 비활성화합니다.

  3. swappiness = 100은 커널에게 물리적 메모리에서 프로세스를 적극적으로 교환하고 캐시를 교환하도록 이동시킵니다.

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

교환 가치를 확인하려면

cat /proc/sys/vm/swappiness

swappiness 값을 변경하려면 swappiness 값이 10 인 임시 변경 (재부트시 손실)을 다음과 같이 수행 할 수 있습니다.

sudo sysctl vm.swappiness=10

영구적으로 변경하려면 즐겨 사용하는 편집기로 구성 파일을 편집하십시오.

gksudo gedit /etc/sysctl.conf

vm.swappiness를 검색하고 원하는대로 값을 변경하십시오. vm.swappiness가 없으면 다음과 같이 파일 끝에 추가하십시오.

vm.swappiness=10

파일을 저장하고 재부팅하십시오.

또한 다음을 확인할 수 있습니다 : https://askubuntu.com/a/103916/54187


답변

귀하의 질문에는 몇 가지 다른 측면이 있습니다.

첫째, “무료”에 대한 귀하의 정의는 무엇입니까? Linux (또는 최신 운영 체제)에서 들리는 것만 큼 간단하지 않습니다.

리눅스가 RAM을 사용하는 방법 (매우 단순화 됨)

각 응용 프로그램은 일부 메모리를 사용할 수 있습니다. Linux는 다른 점유되지 않은 모든 메모리 (마지막 몇 MB 제외)를 “캐시”로 사용합니다. 여기에는 페이지 캐시, inode 캐시 등이 포함됩니다. 이것은 좋은 일입니다. 힙 속도를 높이는 데 도움이됩니다. 디스크에 쓰기와 디스크에서 읽기는 모두 캐시에 의해 엄청나게 빨라질 수 있습니다.

이상적으로는 모든 응용 프로그램에 충분한 메모리가 있고 여전히 캐시에 수백 Mb가 남아 있습니다. 이 상황에서 응용 프로그램이 메모리 사용을 늘리지 않고 시스템이 캐시를위한 충분한 공간을 확보하기 위해 고심하지 않는 한 스왑이 필요하지 않습니다.

응용 프로그램이 더 많은 RAM을 요구하면 캐시에서 사용한 일부 공간으로 들어가서 캐시가 축소됩니다. 캐시 할당 해제는 간단하고 실시간으로 간단하게 수행 할 수있을 정도로 저렴하고 쉽습니다. 캐시에있는 모든 것은 이미 디스크에있는 사본의 두 번째 사본 일 뿐이므로 즉시 할당 해제 할 수 있습니다. 어쨌든 몇 초 안에 디스크를 플러시해야 했습니다 .

이것은 Linux에만 해당되는 상황이 아닙니다. 모든 최신 운영 체제는 이러한 방식으로 작동합니다. 다른 운영 체제는 사용 가능한 RAM을 다르게보고 할 수 있습니다. 일부는 “사용 가능”으로 간주되는 일부로 캐시를 포함하고 일부는 그렇지 않을 수도 있습니다.

사용 가능한 RAM에 대해 이야기 할 때 실제로 사용 가능한 캐시이기 때문에 캐시 를 포함 하는 것이 훨씬 의미가 있습니다 . 응용 프로그램이 요청하면 사용할 수 있습니다. Linux에서 free명령은 두 가지 방법으로보고합니다. 첫 번째 행에는 사용 된 RAM 열에 캐시가 포함되고 두 번째 행에는 사용 가능한 열에 캐시 (및 버퍼)가 포함됩니다.

리눅스가 스왑을 사용하는 방법

부드럽게 실행되는 캐시를위한 공간이 충분하지 않은 충분한 메모리를 사용한 후에는 Linux에서 사용되지 않는 일부 애플리케이션 메모리를 RAM에서 스왑으로 다시 할당하기로 결정할 수 있습니다.

명확한 컷오프에 따라이 작업을 수행하지 않습니다. 일정 비율의 할당량에 도달하면 Linux가 스왑을 시작하는 것과 다릅니다. 다소 “퍼지”알고리즘이 있습니다. “메모리 할당에 대한 압력이 얼마나 많은지”에 의해 가장 잘 설명 할 수있는 많은 것들이 고려됩니다. 새 메모리를 할당해야하는 “압력”이 많으면 더 많은 공간을 확보하기 위해 일부 메모리를 교체 할 가능성이 높아집니다. “압력”이 적 으면 이러한 기회가 줄어 듭니다.

시스템에는 “스왑”설정이있어이 “압력”계산 방법을 조정할 수 있습니다. 일반적으로 이것을 변경하지 않는 것이 좋으며 변경하지 않는 것이 좋습니다. 스와핑은 전반적으로 매우 좋은 일입니다. 성능이 저하되는 몇 가지 경우가 있지만 전체 시스템 성능을 살펴보면 광범위한 작업에 대한 순이익입니다. 스왑 성을 줄이면 실제로 유용 할 수있는 경우에도 캐시 메모리의 양이 다른 것보다 약간 줄어 듭니다. 이것이 스왑과 관련하여 발생하는 모든 문제에 대해 충분한 상충 관계인지 여부는 귀하에게 달려 있습니다. 당신은 무엇을하고 있는지 알아야합니다. 그게 전부입니다.

스왑이 데스크탑 시스템의 인식 된 성능에 실제로 해를 끼치는 잘 알려진 상황이 있으며, 오랜 시간 동안 유휴 상태로 유지되고 백그라운드 프로세스가 IO에서 과중한 경우 (예 : 야간 백업)을 실행합니다. 이것은 매우 눈에 띄는 부진이지만, 스왑을 모두 끄는 것을 정당화하기에는 충분하지 않으며 모든 운영 체제에서 방지하기가 매우 어렵습니다. 백업 / 바이러스 검사 후 스왑을 해제하면이 초기 부진이 발생하지 않지만 시스템은 하루 종일 조금 느려질 수 있습니다. 이것은 Linux에만 국한된 상황이 아닙니다.

디스크로 스왑 할 항목을 선택할 때 시스템은 실제로 사용되지 않거나 읽거나 쓰지 않는 메모리를 선택합니다. 그것은 대부분의 시간을 잘 선택하는 이것을 계산하는 매우 간단한 알고리즘을 가지고 있습니다.

많은 양의 RAM이있는 시스템이 있다면 (작성시 8GB는 일반적인 Linux 배포판의 경우 엄청난 양입니다) 스왑이 필요한 상황은 거의 발생하지 않습니다. 스왑을 끄려고 할 수도 있습니다. 나는 그렇게하는 것을 권장하지 않지만, 더 많은 RAM이 어떤 응용 프로그램 충돌에서 당신을 구할 수 있는지 알 수 없기 때문에. 그러나 필요하지 않다는 것을 알고 있다면 그렇게 할 수 있습니다 .

그러나 스왑은 어떻게 시스템 속도를 높일 수 있습니까? 스와핑이 느려지지 않습니까?

RAM에서 스왑으로 데이터를 전송하는 작업은 느리게 진행되지만 커널이 전반적인 이점이 이보다 중요하다고 확신하는 경우에만 수행됩니다. 예를 들어, 응용 프로그램 메모리가 거의 캐시가 남지 않은 지점으로 올라가고 이로 인해 I / O가 매우 비효율적이라면 실제로 일부 메모리를 확보하여 시스템 속도를 크게 높일 수 있습니다. 데이터를 확보하기 위해 데이터를 교환하는 초기 비용 후.

또한 응용 프로그램 이 실제로 보유한 것보다 더 많은 메모리를 요청하는 것이 최후의 수단 입니다. 이 경우 메모리 부족 상황을 방지하기 위해 스와핑이 필요하며 이로 인해 종종 응용 프로그램이 충돌하거나 강제 종료되어야합니다.

스와핑은 사용 가능한 RAM이 부족할 때 발생하여 스왑이 없어도 시스템이 느려지거나 불안정해질 수 있기 때문에 시스템 성능이 저하되는 시간과 만 관련 이 있습니다. 따라서 일을 단순화하기 위해 스왑 은 시스템이 다른 방향이 아닌 시스템 속도를 떨어 뜨리기 때문에 발생 합니다.

데이터가 교환되면 언제 다시 나옵니까?

스왑에서 데이터를 전송하는 것은 (적어도 전통적인 하드 디스크의 경우) 거기에 넣는 것만 큼 시간 소모적입니다. 이해할 수 있듯이 커널은 스왑에서 데이터를 제거하는 것을 꺼려합니다. 특히 실제로 읽거나 쓰지 않는 경우에는 스왑에서 데이터를 제거합니다. 스왑에서 데이터를 가지고 있고 사용하지 않을거야 경우, 그것은 다른 것들에 대한 더 많은 메모리 잎 이후는, 스왑에 남아 있다는 사실은 좋은 일이 되어 잠재적으로 시스템을 속도, 사용합니다.


답변

swappiness 값 설정이 모든 상황에서 작동하지는 않습니다. 그것이 당신에게 효과적이라면, 좋습니다. 그렇지 않다면 스왑을 껐다가 다시 켜서 주기적으로 지우는 스크립트를 작성했습니다.

조심하지 않으면 스왑 전환이 약간 위험합니다. RAM 에있는 모든 것과 스왑 에있는 모든 것을 담을 수있는 충분한 여유 RAM이없는 경우 , 스왑을 비활성화하면 시스템이 응답하지 않게됩니다. 내 스크립트는 먼저 사용 가능한 RAM이 충분한 지 확인하고 (실제 사용 가능한 RAM의 양이 사용 가능한 free보고서와 다를 수 있으므로 약간의 작업이 필요함) 스왑 만 전환합니다. 그러나 RAM이 약간 부족하면 스크립트가 실행되는 동안 다른 주요 프로세스를 시작하지 마십시오. 여기있어:

#!/bin/bash

# Make sure that all text is parsed in the same language
export LC_MESSAGES=en_US.UTF-8
export LC_COLLATE=en_US.UTF-8
export LANG=en_US.utf8
export LANGUAGE=en_US:en
export LC_CTYPE=en_US.UTF-8

# Calculate how much memory and swap is free
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)"

# Do the work
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    swapoff -a
    swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi

이 스크립트를 루트로 실행해야합니다 (예 : with sudo). 이 스크립트는 시스템을 응답하지 않습니다. RAM이 충분하지 않으면 스왑 전환을 거부합니다. 나는이 스크립트를 거의 5 년 동안 문제없이 사용했습니다.


답변

일반적으로 스왑은 현재 시스템에서 사용되지 않습니다. 내 경험상, 집중적 인 작업없이 오랫동안 실행중인 프로세스는 리눅스에 의해 교체되도록 이동되었습니다.
영향을받는 일부 프로그램이 느리게 실행됩니다.
: 무료 램을 많이하는 경우, 당신은 명령을 실행하여 스왑을 전환 할 수 있습니다
swapoff -av(당신이해야합니다 sudo그것에 대한 권리를.)

오프 스왑을 좋아하지 않는 경우에, 당신은 대칭 명령을 사용하여, 그것을 전환 할 수 있습니다을 :
swapon -av( 다시 sudo요구됨).


답변

스왑이 프로그램에 사용되면 프로그램 수명 동안 매핑 된 상태를 유지하는 경향이 있습니다. 많은 프로그램에는 거의 사용되지 않는 코드 (및 데이터)가 있습니다. 일단 메모리가 교체되면 교체 될 가능성이 없습니다.

이러한 페이지를 메모리에 강제로 저장하는 한 가지 방법은 스왑 장치를 끄는 것입니다. 두 개가있는 경우 하나를 껐다가 다시 켤 수 있습니다. 스왑이 실제로 필요한 경우 장치간에 이동합니다. 스왑 장치 (또는 파일)를 끌 수는 있지만 실제로 스왑 공간이 필요한 경우 과감한 일이 발생할 수 있습니다.

메모리의 일반적인 것 외에도 tempfs는 스왑 공간을 사용하고 나머지 메모리처럼 스왑됩니다. 많은 임시 디스크가 필요한 작업을 실행하면 페이지가 강제로 스왑 될 수 있습니다. 일단 생성 된 임시 파일은 몇 분 후에 더 이상 사용되지 않을 수 있으며 스왑 장치로 이동하기에 적합한 후보입니다.

핀치에서 파일을 스왑 장치로 사용할 수 있습니다. 이는 여분의 스왑 공간이 일시적으로 필요한 경우에 유용합니다.


답변

Scott Severance의 스크립트를 편집 하여 사용 가능한 총 메모리 필드가 이미 포함 된 최신 버전의 free를 수정했습니다.

#!/bin/bash

free_mem="$(free | grep 'Mem:' | awk '{print $7}')"
used_swap="$(free | grep 'Swap:' | awk '{print $3}')"

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


답변