EC2 인스턴스에 스왑을 어떻게 추가합니까?


293

나는 현재 ec2 마이크로 인스턴스를 실행 중이며 인스턴스에 때때로 메모리가 부족하다는 것을 발견했습니다.

더 큰 인스턴스 크기를 사용하는 것 외에 다른 작업을 수행 할 수 있습니까?

답변:


574

이 문제에 대한 수정 프로그램을 추가하는 것입니다 swap(즉, paging인스턴스에) 공간.

페이징은 하드 드라이브에 영역을 만들고 추가 메모리에 사용하여 작동합니다.이 메모리는 일반 메모리보다 훨씬 느리지 만 더 많은 메모리를 사용할 수 있습니다.

이 여분의 공간을 인스턴스에 추가하려면 다음을 입력하십시오.

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo chmod 600 /var/swap.1
sudo /sbin/swapon /var/swap.1

1024 이상이 필요하면 더 높은 것으로 변경하십시오.

재부팅 후 기본적으로 활성화하려면 다음 행을 / etc / fstab에 추가하십시오.

/var/swap.1   swap    swap    defaults        0   0

인수 목록에서 if, of 및 =를 본 적이 없기 때문에 "if = ...", "of = ...", bs = 1M 및 count = 1024의 의미를 설명해 주시겠습니까?
아렉 쿠스

31
if'입력 파일', of'출력 파일', bs'블록 크기', count할당하려는 블록 수 등 man을 의미합니다. 자세한 정보는 명령 페이지를 읽을 수 있습니다 . linux.die.net/man/1/ dd
파티오 바티스타

4
dd 명령 줄은 "/ dev / zero에서 /var/swap.1로 복사합니다. 1MB 크기의 1024 개 블록을 읽음으로써이를 수행하십시오". 0으로 가득 찬 1GB 파일을 만드는 빠른 방법입니다.
Nelson

3
오래되었지만 스왑 메모리는 재시작 후에도 0 % 사용 상태로 남아 있습니다. 도움이 필요하십니까?
Girdhari Agrawal

3
스왑이 활성화되어 있는지 확인하려면 :$> free -m
herve

216

스왑은 EBS 디바이스가 아닌 인스턴스 스토리지 (일시적) 디스크에서 이루어져야합니다. 교환하면 많은 IO가 발생하고 EBS 비용이 증가합니다. EBS는 또한 인스턴스 스토어보다 느리고 인스턴스 스토어에는 특정 유형의 EC2 인스턴스 가 무료로 제공됩니다 .

일반적으로 / mnt에 마운트되지만 실행되지 않으면

sudo mount /dev/xvda2 /mnt

이 장치에서 스왑 파일을 만들려면 4GB 스왑 파일에 대해 다음을 수행하십시오.

sudo dd if=/dev/zero of=/mnt/swapfile bs=1M count=4096

다른 사용자가 스왑 파일을 볼 수 없도록하십시오

sudo chown root:root /mnt/swapfile
sudo chmod 600 /mnt/swapfile

스왑으로 만들고 플래그 지정

sudo mkswap /mnt/swapfile
sudo swapon /mnt/swapfile

다음을 / etc / fstab에 추가 / 확인하십시오

/dev/xvda2      /mnt    auto    defaults,nobootwait,comment=cloudconfig 0   2
/mnt/swapfile swap swap defaults 0 0

마지막으로 스왑을 활성화

sudo swapon -a

6
이것은 확실히 가장 포괄적 인 답변입니다.
Jon B

4
파일 시스템을 마운트하려면 파일 시스템 유형을 지정해야합니다. 파일 시스템을 찾으려면 다음 명령을 사용하십시오. $ df -T 장치와 파일 시스템을 보여줍니다. 대부분 ext4. 나를 위해 그것은 2가 아니라 / dev / xvda1이었습니다.
user1452686

8
docs.aws.amazon.com/AWSEC2/latest/UserGuide/… 에 따르면 t1 / t2 인스턴스에 더 이상 인스턴스 스토어를 추가 할 수 없습니다. 상관없이 시도한 후에는 올바른 것 같습니다.
muttonUp

3
@alfetopito 스왑으로 다른 파티션을 추가하는 대신 기존 파티션에 리터럴 스왑 파일을 만들 수 있습니다. Centos 6를위한 멋진 안내서 -digitalocean.com/community/tutorials/…
muttonUp

1
아마존에 따르면 재부팅 후 인스턴스 스토리지를 유지한다고 보장되지 않습니다. 그러면 fstab이 실패하지 않습니까?
듀얼

42

ajtrichards가 언급 한 단계를 적용한 후이 명령을 사용하여 Amazon 프리 티어 인스턴스가 스왑을 사용 중인지 확인할 수 있습니다.

cat /proc/meminfo

결과:

ubuntu@ip-172-31-24-245:/$ cat /proc/meminfo
MemTotal:         604340 kB
MemFree:            8524 kB
Buffers:            3380 kB
Cached:           398316 kB
SwapCached:            0 kB
Active:           165476 kB
Inactive:         384556 kB
Active(anon):     141344 kB
Inactive(anon):     7248 kB
Active(file):      24132 kB
Inactive(file):   377308 kB
Unevictable:           0 kB
Mlocked:               0 kB

스왑 총계 : 1048572 kB

스왑 무료 : 1048572 kB

Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        148368 kB
Mapped:            14304 kB
Shmem:               256 kB
Slab:              26392 kB
SReclaimable:      18648 kB
SUnreclaim:         7744 kB
KernelStack:         736 kB
PageTables:         5060 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1350740 kB
Committed_AS:     623908 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7420 kB
VmallocChunk:   34359728748 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB

40

다음 명령을 사용하여 인스턴스에 1GB 스왑을 추가 할 수 있습니다.

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo mkswap /swapfile
sudo swapon /swapfile

재부팅 후 기본적으로 활성화하려면 다음에 다음 줄을 추가하십시오 /etc/fstab.

/swapfile swap swap defaults 0 0

그러나 내 파일 시스템 중 어느 것이 스왑을 만드는 데 공간이 필요합니까?
Hussain

@Hussain 경로가이므로 루트 파일 시스템에 스왑을 생성합니다 /swapfile. 그러나 다른 파일 시스템을 마운트하고 스왑 파일을 만들 수도 있습니다 (예 :) /mnt/blah/swapfile.
David Levesque

이것이 t2.micro 인스턴스에서 작동하는지 확인할 수 있습니다. 나는 깨끗한 루트를 좋아하지만 @ / mnt / swap을 채굴했습니다.
Mike Purcell

1
이 답변은 가장 짧고 작업을 수행하기 때문에이 답변을 찬성했습니다. 그러나 swapfile chmod 600 명령이 추가되어야합니다.
Sõber

15

당신은에있는 경우 t2인스턴스 ( t2.micro, t2.medium, t2.small), 당신에게 가능한 임시 또는 인스턴스 스토리지가 없습니다. 따라서 EBS유스 케이스에 따라 좋은 아이디어가 아닐 수도있는 스왑을 작성해야합니다 . 그렇지 않으면 @David의 답변을 따르고 임시 스토리지에서 스왑을 생성하여 EBS 비용 지불을 피하십시오.

추가 정보 : http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html 각 인스턴스 유형에 대해 얼마나 많은 임시 스토리지를 얻는 지 보여주는 표가 있습니다.


1
이것이 일반적으로 나쁜 생각임을 확인할 수 있습니다. 불량한 프로세스가있는 경우 (노드 서버에서 파이썬 및 셀러리 설정을 수행 한 경우) 모르는 사이에 일주일 내내 EBS 블록을 읽고 쓸 때 많은 비용이 발생합니다. -)
ZachM 2016 년

3
aws.amazon.com/ebs/pricing 에 따르면 IO는 프로비저닝 된 IPOS SSD (io1)를 제외한 모든 EBS 볼륨에 포함됩니다. GB 당 귀하입니다. 이는 최근 가격 책정 모델에서 변경된 것일 수 있지만 EBS가 실제 인스턴스 스토 레이스보다 훨씬 느리더라도 읽기 및 쓰기에 대한 추가 요금이 없음을 의미합니다.
bobsoap

@bobsoap 명확하게 설명 하시겠습니까? 귀하의 링크를 확인한 결과을 찾았습니다 For example, if you provision a volume with 1000 IOPS, and keep this volume for 15 days in a 30 day month, then in a Region that charges $0.10 per provisioned IOPS-month, you would be charged $50 for the IOPS that you provision ($0.10 per provisioned IOPS-month * 1000 IOPS provisioned * 15 days/30). You will be charged for the IOPS provisioned on a volume even when the volume is detached from an instance.. AWS가 읽기 및 쓰기 작업에 대한 비용을 청구하는 것 같습니다.
발터 실바

2
@ValterHenrique 인용 한 텍스트는 프로비저닝 된 IOPS가있는 볼륨에만 적용되지만 여러 가지 다른 볼륨 유형 중에서 선택할 수 있습니다. 프로비저닝 된 IOPS가없는 "일반"볼륨 (예 : "gp2"라는 범용 SSD 볼륨 유형)을 사용하는 경우 읽기 및 쓰기 작업에 추가 요금이 부과되지 않습니다. 아마 더 나은 비교 링크 : aws.amazon.com/ebs/details
bobsoap

8

다음 단계를 사용하여 스왑 공간을 만들 수 있습니다. /home/

  1. dd if=/dev/zero of=/home/swapfile1 bs=1024 count=8388608
    여기서 카운트는 스왑 공간의 킬로바이트 수입니다.

  2. mkswap /home/swapfile1

  3. vi /etc/fstab
    입장하다 :
    /home/swapfile1 swap swap defaults 0 0

  4. 운영:
    swapon -a


4

모든 서버에 스왑 공간을 추가 할 수 있습니다

dd 명령을 사용하여 파일 작성

 #dd if=/dev/zero of=/swapfile bs=1M count=2048
                    or
 #dd if=/dev/zero of=/swapfile bs=1024M count=2

bs는 블록 크기 이며 countMB 또는 GB 단위크기를 나타냅니다.

우리는 그 반대로도 사용할 수 있습니다

작성 후 파일의 권한을 변경하십시오.

 #chmod 600 /swapfile 

그런 다음 파일을 바꿉니다.

 #mkswap /swapfile 

그런 다음 swapon 명령으로 swap 파일을 활성화하십시오.

 #swapon  /swapfile 

스왑이 활성화되어 있는지 여부를 free 명령으로 확인하십시오.

 #free -h
 #swapon -s

3

David의 인스턴스 스토리지 사용 답변은 처음에 (m5d.2xlarge에서) 효과가 있었지만 EC2 인스턴스를 중지하고 다시 켠 후에 인스턴스에 다시 ssh를 넣을 수 없었습니다.

인스턴스 로그는 "비상 모드에 있습니다. 로그인 한 후"journalctl -xb "를 입력하여 시스템 로그를보고,"systemctl reboot "를 재부팅하여"systemctl default "또는"exit "를 입력하여 기본 모드로 부팅하십시오. Enter를 누르십시오. 유지 보수 "

대신이 링크의 AWS 지침을 따르고 인스턴스를 껐다가 다시 켜는 등 모든 것이 완벽하게 작동했습니다.

https://aws.amazon.com/premiumsupport/knowledge-center/ec2-memory-swap-file/

sudo dd if=/dev/zero of=/swapfile bs=1G count=4

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

sudo swapon -s

sudo vi /etc/fstab
/swapfile swap swap defaults 0 0

1

swapspace를 시도하십시오 http://pqxx.org/development/swapspace/

대부분의 배포판에는 패키지가 있습니다.

EC2에서는 "swappath"를 / mnt 또는 high-iops 디스크로 변경할 수 있습니다.


1
문서에서 : "현재 형태에서, 스왑 스페이스는 아마도 항상 응답 성을 유지해야하는 시스템에는 적합하지 않습니다."
Dave Albert

-3

다음 스크립트를 사용하여 Amazon Linux에서 스왑을 추가 할 수 있습니다.

https://github.com/chetankapoor/swap

wget을 사용하여 스크립트를 다운로드하십시오.

wget https://raw.githubusercontent.com/chetankapoor/swap/master/swap.sh -O swap.sh

그런 다음 다음 형식으로 스크립트를 실행하십시오.

sh swap.sh 2G

완전한 자습서를 보려면 다음을 방문하십시오.

https://installvirtual.com/shell-script-to-create-swap/


기본적으로 허용 된 답변이 이미 설명한 것을 수행하는 쉘 스크립트 인 것 외에도이 답변이 무엇을 제공하는지 알 수 없습니다.
Nils Werner

방금 쉘 스크립트를 작성하여 시간을 절약하므로 5 개의 명령을 실행하는 대신 스왑을 작성하는 2 단계가 있으며 스왑이 이미 존재하면 스왑이 이미 있음을 표시합니다.
Chetan kapoor

3
바로 그거죠. 루트로 실행 해야하는 쉘 스크립트. 예고없이 변경되거나 사라질 수있는 누군가가 만든 것입니다. 모두 5 년 전에 게시되고 승인 된 4-5 개의 명령 줄을 저장합니다.
Nils Werner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.