Làm thế nào để bạn thêm trao đổi vào một ví dụ EC2?


293

Tôi hiện đang chạy một cá thể ec2 và tôi đã phát hiện ra rằng cá thể đó thỉnh thoảng hết bộ nhớ.

Ngoài việc sử dụng kích thước cá thể lớn hơn, còn có thể làm gì khác?

Câu trả lời:


574

Một sửa chữa cho vấn đề này là thêm swap(tức là paging) không gian vào ví dụ.

Phân trang hoạt động bằng cách tạo một vùng trên ổ cứng của bạn và sử dụng nó cho bộ nhớ thêm, bộ nhớ này chậm hơn nhiều so với bộ nhớ bình thường, tuy nhiên có nhiều hơn thế.

Để thêm không gian bổ sung này vào ví dụ của bạn, bạn gõ:

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

Nếu bạn cần nhiều hơn 1024 thì thay đổi nó thành một cái gì đó cao hơn.

Để bật nó theo mặc định sau khi khởi động lại, hãy thêm dòng này vào / etc / fstab:

/var/swap.1   swap    swap    defaults        0   0

Bạn có thể giải thích nghĩa của nó là "if = ...", "of = ...", bs = 1M và Count = 1024 vì tôi chưa bao giờ thấy if, of và = trong danh sách đối số.
ア レ ッ ス

31
ifnghĩa là 'tệp đầu vào', ofnghĩa là 'tệp đầu ra', bsnghĩa là 'kích thước khối' và countlà số khối bạn muốn phân bổ, bạn có thể đọc mantrang của lệnh để biết thêm thông tin: linux.die.net/man/1/ dd
Fábio Batista

4
Dòng lệnh dd đó có nghĩa là "sao chép từ / dev / zero sang /var/swap.1. Thực hiện điều đó bằng cách đọc 1024 khối có kích thước 1 megabyte". Đây là cách nhanh chóng để tạo tệp 1GB chứa đầy số không.
Nelson

3
đủ cũ, nhưng bộ nhớ trao đổi của tôi vẫn được sử dụng 0% ngay cả sau khi khởi động lại, có giúp được gì không?
Girdhari Agrawal

3
Nếu bạn muốn kiểm tra nếu hoán đổi đang hoạt động:$> free -m
herve

216

Việc hoán đổi phải diễn ra trên đĩa Lưu trữ Instance (phù du) chứ không phải thiết bị EBS. Trao đổi sẽ gây ra rất nhiều IO và sẽ tăng chi phí trên EBS. EBS cũng chậm hơn so với Instance Store và Instance Store miễn phí với một số loại EC2 nhất định .

Nó thường sẽ được gắn vào / mnt nhưng nếu không chạy

sudo mount /dev/xvda2 /mnt

Để sau đó tạo tệp hoán đổi trên thiết bị này, hãy làm như sau đối với tệp hoán đổi 4GB

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

Đảm bảo không người dùng nào khác có thể xem tệp hoán đổi

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

Thực hiện và gắn cờ như trao đổi

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

Thêm / Đảm bảo các mục sau có trong / etc / fstab của bạn

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

cuối cùng cho phép trao đổi

sudo swapon -a

6
đây chắc chắn là câu trả lời toàn diện nhất imo
Jon B

4
Để gắn kết một hệ thống tệp, người ta phải chỉ định loại hệ thống tệp. Để tìm hệ thống tệp, lệnh là: $ df -T Điều này sẽ cho bạn thấy các thiết bị và hệ thống tệp của chúng. Chủ yếu là ext4. Đối với tôi đó là / dev / xvda1, không phải 2.
user1452686

8
Theo docs.aws.amazon.com/AWSEC2/latest/UserGuide/ , không thể thêm các cửa hàng Instance vào các trường hợp t1 / t2. Sau khi thử bất kể, nó có vẻ là chính xác.
muttonUp

3
@alfetopito Bạn có thể có thể tạo một tệp hoán đổi bằng chữ trên một phân vùng hiện có thay vì thêm một phân vùng khác làm trao đổi. Một hướng dẫn tuyệt vời cho Centos 6 - digitalocean.com/community/tutorials/ từ
muttonUp

1
Theo Amazon, không đảm bảo rằng bạn giữ bộ nhớ cá nhân của mình sau khi khởi động lại, sau đó fstab sẽ thất bại?
đôi

42

Sau khi áp dụng các bước được đề cập bởi ajtrichards, bạn có thể kiểm tra xem phiên bản tầng miễn phí amazon của bạn có đang sử dụng trao đổi bằng lệnh này không

cat /proc/meminfo

kết quả:

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

SwapTotal: 1048572 kB

Trao đổi miễn phí: 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

Bạn có thể thêm trao đổi 1 GB vào ví dụ của mình bằng các lệnh sau:

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

Để bật nó theo mặc định sau khi khởi động lại, hãy thêm dòng này vào /etc/fstab:

/swapfile swap swap defaults 0 0

Nhưng từ hệ thống tập tin của tôi, nó sẽ chiếm không gian để tạo Hoán đổi?
Hussain

@Hussain Nó sẽ tạo ra sự hoán đổi trong hệ thống tập tin gốc vì đường dẫn là /swapfile. Nhưng bạn cũng có thể gắn kết một hệ thống tập tin khác và tạo tập tin hoán đổi ở đó, ví dụ /mnt/blah/swapfile.
David Levesque

Có thể xác nhận điều này hoạt động trên một ví dụ t2.micro. Tôi đã khai thác @ / mnt / exchange mặc dù tôi thích root sạch.
Mike Purcell

1
Nâng cao câu trả lời này vì nó ngắn nhất và thực hiện công việc. Tuy nhiên, nên thêm lệnh chfod chfod 600.
Sõber

15

Nếu bạn đang ở trên t2trường ( t2.micro, t2.medium, t2.small), không có phù du hoặc dụ lưu trữ sẵn cho bạn. Vì vậy, bạn chỉ cần tạo trao đổi của bạn trong EBSđó tùy thuộc vào trường hợp sử dụng của bạn có thể hoặc không thể là một ý tưởng tốt. Nếu không, hãy làm theo câu trả lời của @David và tạo trao đổi của bạn trên bộ lưu trữ phù du để tránh phải trả chi phí EBS.

Thông tin thêm: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html có một bảng cho biết dung lượng lưu trữ phù du bạn nhận được cho mỗi loại phiên bản.


1
Có thể xác nhận đây là một ý tưởng tồi. Nếu bạn có một quy trình bất hảo (tôi đã có một máy chủ nút làm điều đó và thiết lập python / celery), bạn sẽ phải chịu một tấn phí khi nó đọc và ghi vào khối EBS của bạn cả tuần mà bạn không biết: -)
ZachM

3
Theo aws.amazon.com/ebs/pricing , IO được bao gồm trong tất cả các khối EBS ngoại trừ SSD IPOS được cấp phép (io1). Bạn chỉ trên mỗi GB. Đây có thể là một sự thay đổi gần đây trong mô hình định giá - nhưng điều đó có nghĩa là mặc dù EBS chậm hơn nhiều so với Instance Storace thực sự, không có phí bổ sung cho việc đọc và ghi.
bobsoap

@bobsoap Bạn có phiền để làm rõ điều đó không? Tôi đã kiểm tra liên kết của bạn và tìm thấy liên kết này 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.. Có vẻ như AWS sẽ tính phí cho các hoạt động đọc và ghi.
Valter Silva

2
@ValterHenrique Văn bản bạn trích dẫn chỉ áp dụng cho các tập chỉ có IOPS được cung cấp, nhưng bạn có thể lựa chọn giữa một số loại âm lượng khác nhau. Nếu bạn đang sử dụng âm lượng "bình thường" mà không có IOPS được cung cấp (như loại âm lượng SSD đa năng được gọi là "gp2"), các hoạt động đọc và ghi sẽ không bị tính phí thêm. Có lẽ một liên kết tốt hơn để so sánh: aws.amazon.com/ebs/details
bobsoap

8

Bạn có thể tạo không gian hoán đổi bằng các bước sau Ở đây chúng tôi đang tạo trao đổi tại /home/

  1. dd if=/dev/zero of=/home/swapfile1 bs=1024 count=8388608
    Ở đây tính là số kilobyte của không gian hoán đổi

  2. mkswap /home/swapfile1

  3. vi /etc/fstab
    thực hiện:
    /home/swapfile1 swap swap defaults 0 0

  4. chạy:
    swapon -a


4

Chúng tôi có thể thêm không gian trao đổi trong bất kỳ máy chủ

tạo tập tin bằng lệnh dd

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

bs là kích thước khốisố lượng liên quan đến kích thước tính bằng MB hoặc GB

chúng ta có thể sử dụng ngược lại

Sau khi tạo, thay đổi sự cho phép của tập tin:

 #chmod 600 /swapfile 

Sau đó thực hiện tập tin:

 #mkswap /swapfile 

Sau đó kích hoạt tệp hoán đổi bằng lệnh hoán đổi:

 #swapon  /swapfile 

Kiểm tra bằng lệnh miễn phí xem trao đổi có được bật hay không:

 #free -h
 #swapon -s

3

Tuy nhiên, ban đầu, sử dụng câu trả lời lưu trữ Instance của David đã có hiệu quả đối với tôi (trên m5d.2xlarge), sau khi dừng phiên bản EC2 và bật lại, tôi không thể quay lại ví dụ.

Nhật ký phiên bản đã báo cáo: "Bạn đang ở chế độ khẩn cấp. Sau khi đăng nhập, nhập" Tạp chí -xb "để xem nhật ký hệ thống," khởi động lại hệ thống "để khởi động lại," mặc định systemctl "hoặc" thoát "để khởi động vào chế độ mặc định. để bảo trì "

Thay vào đó, tôi đã làm theo các hướng dẫn AWS trong liên kết này và mọi thứ hoạt động hoàn hảo, bao gồm cả sau khi tắt và bật lại ví dụ.

https://aws.amazon.com/premiumsupport/ledgeledge-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

Hãy thử hoán đổi http://pqxx.org/development/swapspace/

Hầu hết các distro có nó được đóng gói.

Trên EC2, bạn có thể muốn thay đổi "swappath" thành / mnt hoặc đĩa iops cao.


1
Từ các tài liệu: "Ở dạng hiện tại, Swapspace có lẽ không phải là một lựa chọn tốt cho các hệ thống cần duy trì phản hồi mọi lúc;"
Dave Albert

-3

Bạn có thể sử dụng tập lệnh sau để thêm trao đổi trên Amazon Linux.

https://github.com/chetankapoor/swap

Tải xuống tập lệnh bằng wget:

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

Sau đó chạy tập lệnh với định dạng sau:

sh swap.sh 2G

Đối với một hướng dẫn đầy đủ, bạn có thể truy cập:

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


Tôi không thấy câu trả lời này đóng góp gì, ngoài việc chỉ là một bản tóm tắt mà về cơ bản là những gì câu trả lời được chấp nhận đã giải thích.
Nils Werner

Tôi vừa tạo một kịch bản shell, nó tiết kiệm thời gian nên sẽ có 2 bước để tạo trao đổi thay vì chạy 5 lệnh và nếu trao đổi đã tồn tại, nó sẽ hiển thị cho bạn trao đổi đã ở đó.
Chetan kapoor

3
Chính xác. Một shellscript mà tôi phải chạy như root. Được tạo bởi ai đó, ở đâu đó, có thể thay đổi hoặc biến mất mà không cần thông báo trước. Tất cả để lưu 4-5 dòng lệnh đã được đăng và chấp nhận 5 năm trước.
Nils Werner
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.