EC2 우분투 이미지에 스왑이없는 이유는 무엇입니까?


82

EC2에서 몇 대의 서버를 시작했는데 스왑이 없습니다.

내가 잘못하고 있거나 기계에없는 것이 있습니까?


나도 궁금했지만 EBS 인스턴스를 설정하고 스왑으로 포맷하고 swapon / dev / sdg ...
Tom O'Connor

Linux 시스템에서 SSD 드라이브를 사용하여 SSD 드라이브에서 스왑을 설정하지 않는 경우도 일반적입니다. 대부분의 사람들은 편집증이기 때문에 항상 같은 섹터 세트를 시추함으로써 SSD의 스토리지 수명에 부정적인 영향을 미칩니다.
djangofan

1
AMI 및 EC2 인스턴스 크기 스왑 파티션을 사용하도록 AMI를 구성해야하며 시작시 인스턴스를 추가해야합니다.
Jeremy Bouse

가능하다면 99 % 확신 할 수 없다면 EC2에서 스왑을 사용하지 말 것을 권장합니다 (IE는 비상시에만 존재합니다). 일부 EC2 인스턴스에서 스왑을 비활성화하면 월별 EBS IO 비용이 절반으로 줄어 듭니다. 그냥 내 두 센트 당신에게 두 센트를 저장-예, 끔찍한, 사과하고 구석에 숨어있을 것이다;)
Smudge

이 단계에서 당신은 또한 볼 수 있었다 docs.aws.amazon.com/AWSEC2/latest/UserGuide/...
Artem.Borysov

답변:


74

Ubuntu EC2 EBS 이미지에는 스왑 공간이 구성되어 있지 않습니다 ( 최소 11.04 ). "일반적인"인스턴스 유형 이미지에는 스왑 파티션이 있지만 테스트 한 이미지에는 896MB 만 있습니다.

일부 프로세스가 중단되고 스왑 공간이 없으면 OOM 킬러가 시작되기 전에 서버가 크롤링 정지 상태가 될 수 있지만 스왑을 사용하면 느려집니다. 따라서 충분한 RAM이 있더라도 항상 스왑 공간을 확보하고 싶습니다. 옵션은 다음과 같습니다.

  • (I는 "메모리"에 대한은 / dev / xvdm을 호출 등), EBS 볼륨 (당신의 RAM의 2 ~ 4 배 크기) 만들기 인스턴스에 첨부 sudo mkswap /dev/xvdm, fstab 파일에 추가 sudo swapon -a하고, 당신이 갈 수 있어요 . 이전 에이 작업을 수행했지만 정상적으로 작동하지만 네트워크를 통과하기 때문에 인스턴스 스토어보다 약간 느립니다.

  • 또는 스왑 파티션을 추가하기 위해 디스크를 다시 파티션 할 수 있지만 새 AMI를 만들어야 할 수도 있습니다. 루트 파일 시스템을 마운트 해제 할 수없고 디스크 장치 (/ dev / xvda)에 액세스 할 수없고 파티션 (xvda1)에만 액세스 할 수 없기 때문에 실행중인 인스턴스에서이 작업을 수행 할 수 없었습니다.

  • 또는 스왑 파일을 만들 수 있습니다. 이것이 현재 선호되는 솔루션입니다.

    sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048 &&
    sudo chmod 600 /var/swapfile &&
    sudo mkswap /var/swapfile &&
    echo /var/swapfile none swap defaults 0 0 | sudo tee -a /etc/fstab &&
    sudo swapon -a
    

    끝난. :) 많은 사람들이 파티션 대신 파일을 사용하는 것에 대해 불안감을 느끼지만 비상 스왑 공간으로 충분하게 작동합니다.


4
다른 답변에서 알 수 있듯이 EBS 볼륨으로 교체하면 추가 비용이 발생할 수 있습니다. 스왑을 사용하지 않거나 인스턴스 스토어로 스와핑하는 것이 더 나은 솔루션처럼 보입니다.
isuldor

7
EBS보다 인스턴스 스토어를 사용하는 것이 더 좋습니다. EBS는 네트워크 파일 시스템이므로 다른 모든 것과 동일한 네트워크 연결을 통해 EC2 인스턴스에 연결됩니다. 인스턴스 스토어는 인스턴스를 호스팅하는 하드웨어에 연결되므로 인스턴스를 중지하고 시작할 때 유지되지 않습니다. EBS가 스왑을위한 옵션 인 유일한 시간은 인스턴스 스토리지와 함께 제공되지 않는 인스턴스 유형을 사용하는 경우입니다. 교환).
ColtonCat

bs = 1M은 이미 이진 표기법이므로 count = 2048 multiplier는 count = 2000이어야합니다.
ypocat

1
2GiB를 사용한다면 1024 * 2048이 올바른 것 같습니다.
Jo Liss

25

스왑 IMHO에 가장 적합한 위치는 인스턴스 저장소입니다. 왜? AWS는 인스턴스 스토어에서 I / O에 대한 요금을 청구하지 않습니다. 게다가 인스턴스 스토어는 많은 경우 EBS보다 성능이 우수합니다. 인스턴스를 중지 한 경우 스왑 파일을 다시 생성하는 스크립트가 있는지 확인하십시오. 재부팅은 괜찮습니다. 왜 기본적으로없는 이유는 무엇입니까?

인스턴스 스토어를 찾으십시오.

root@domU-**-**-**-**-**-**:/var/log# fdisk -l

[...]

Disk /dev/xvda2: 160.1 GB, 160104972288 bytes
255 heads, 63 sectors/track, 19464 cylinders, total 312705024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda2 doesn't contain a valid partition table

Hurray, 160.1GB 무료! EBS 기반 스왑이 실수로 밀려날 때 스왑을 넣고 서버 당 100 $ 초과를 잊어 버리십시오. 유감스럽게도 여기에서 이야기하는 경험.

분명히 어떤 경우에는 인스턴스 저장소가 표시되지 않습니다.

인스턴스 유형에 따라 먼저 block-device-mapping 옵션을 사용하여 인스턴스 스토어 볼륨을 인스턴스에 연결해야합니다. 이 작업을 수행하지 않으면 / dev에 디바이스가 표시되지 않을 수도 있습니다 ( Amazon EC2에서 "인스턴스 스토어 볼륨"스토리지를 사용하는 방법에 따라 ? )


1
프리 티어의 t1.micro 사용자는이 옵션을 사용할 수 없습니다.
Reuben L.

20

참고 : Amazon은 가격 정책 을 변경했으며 2016 년 중반부터 I / O 요청에 대해 요금을 부과하지 않습니다. 역사적으로 대답은 여기에 있지만 EC2 EBS 지원 인스턴스에서 스왑을 사용하거나 사용하지 않으면 비용에 영향을주지 않습니다.


이것은 의도적으로 설계된 동작입니다. 예상치 못한 비용을 피하기 위해 EC2 EBS 지원 인스턴스에서 스왑이 기본적으로 해제되어 있습니다.

불량한 메모리 부족 앱 (예 : 작은 또는 작은 인스턴스)이있는 경우 EBS 볼륨에서 상당히 많은 양의 I / O 요청을 생성 할 수 있습니다. 아마존은 1 백만 건의 I / O 요청 당 0.10 달러를 청구합니다 ( http://aws.amazon.com/pricing/ebs/ 참조 ) .

정상적인 상황에서는 걱정하지 않아도됩니다. 일반적으로 I / O 요청 비용은 소규모 인스턴스에서도 몇 달러에 불과합니다. 따라서 적절한 크기의 인스턴스가 있고 해당 스왑이 자주 사용되지 않는 경우 계속 진행하여 활성화하십시오. 그러나 작은 인스턴스에주의하십시오.

스왑을 활성화하면 사용 보고서를 주시 할 수 있습니다. 선택적으로 CloudWatch 제어판 으로 이동 하여 총 청구 금액에 대한 새 경보를 생성하여 청구 알림을 설정할 수도 있습니다 . 이 방법으로 즉시 알림을 받으면 인스턴스에서 이상한 일이 발생합니다.


가장 일반적인 인스턴스 유형이 SSD 볼륨을 사용하기 때문에이 답변은 약간 오도되거나 혼동됩니다. aws.amazon.com/ec2/instance-types
Taylor Edmiston

2
@tedmiston : 사실이 답변은 더 이상 적용되지 않습니다. 새로운 현실을 반영하도록 조정했지만 기본적으로 I / O 요청에 대한 비용은 없으므로 이제 순전히 기술 기반으로 스왑을 활성화 할 수 있습니다.
Gui Ambros

1

/etc/fstab파일을 확인하십시오 . 사용중인 이미지에서 스왑없이 설정되었을 수 있습니다. 어떤 사람들은 총 메모리보다 더 많이 사용하지 않기를 기대하기 때문에 서버에 대한 스왑없이 실행한다고 생각합니다. 스왑은 모든 것을 매우 느리게 만듭니다.

그러나 나는 항상 메모리에 일부 프로세스 벌룬에 대해 편집증이 있으므로 스왑 드라이브를 설정하고 실행중인 ec2 인스턴스에서 이미지를 다시 만드는 것이 현명하다고 생각합니다.


2
간혹 교체해도 시스템 속도가 느려지지 않습니다.
laebshade 2016 년

0

실행에 대한 간단한 해결책 swapEC2이미지가 실행하는 것입니다 swap압축 lz4ramzram-init.

  • 서비스 스크립트는 systemd& 에 사용할 수 있습니다 openrc.

이 솔루션은 다음 을 제거 하지 않습니다 .ramhost

여기에 이미지 설명을 입력하십시오


1
매우 독창적이지만 RAM을 실제 RAM으로 사용하지 않더라도 스왑을 위해 메모리 내 파일 시스템으로 사용하는 것보다 더 의미가 있습니까? (메모리가 부족할 때 주로 사용됨) 스왑을 생성하기 위해 응용 프로그램에 사용 가능한 메모리의 양을 줄이는 것은 직관적이지 않은 것 같습니다 ...
HBruijn

흥미로운 답변이지만 EBS / 인스턴스 스토어를 사용하는 것이 더 나은 범용 솔루션 일 것입니다. EBS에서 512MB RAM 및 512MB 스왑이있는 t2.nano가 제대로 작동합니다.
Tim

이것은 분명히 호스트에서 RAM을 가져옵니다 (EC2 인스턴스)-RAM은 어디에서 왔습니까? 이 방법의 유일한 장점은 전체 RAM의 일부를 압축하는 것이지만 SSD를 스왑으로 사용하는 기능은 제공하지 않습니다. 대신 zswap일반 스왑 파일 / 디스크 위에 압축 된 RAM 캐시를 제공하는 wiki.archlinux.org/index.php/zswap을 사용할 수 있습니다. zram에 대한 자세한 내용은 cnx-software.com/2018/05/14/… 를 참조하십시오 .
RichVel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.