Tại sao hình ảnh EC2 ubfox không hoán đổi?


82

Tôi đã bắt đầu một vài máy chủ trên EC2 và chúng không có trao đổi.

Tôi đang làm gì đó sai hay là máy móc không có gì cả?


Tôi cũng tự hỏi điều đó, nhưng tôi chỉ thiết lập một thể hiện EBS, định dạng nó là hoán đổi và hoán đổi / dev / sdg ...
Tom O'Connor

Nó cũng điển hình, trường hợp sử dụng ổ SSD trên hệ thống Linux để không thiết lập trao đổi trên ổ SSD. Chủ yếu là vì một số người bị hoang tưởng, nó sẽ có tác động tiêu cực đến tuổi thọ lưu trữ của SSD bằng cách khoan cùng một bộ các lĩnh vực mọi lúc.
djangofan

1
AMI nào và cỡ EC2 nào. AMI cần được cấu hình để sử dụng phân vùng trao đổi và thể hiện phải được thêm vào khi khởi động.
Jeremy Bouse

Nếu có thể, tôi khuyên bạn không nên sử dụng trao đổi trên EC2 trừ khi bạn chắc chắn 99% bạn sẽ không phải sử dụng nó (IE chỉ có ở đó cho trường hợp khẩn cấp). Khi chúng tôi vô hiệu hóa trao đổi trên một số phiên bản EC2, chi phí IO EBS hàng tháng của chúng tôi có thể giảm một nửa. Chỉ hai xu của tôi để giúp bạn tiết kiệm hai xu - vâng, điều đó thật tồi tệ, tôi xin lỗi và sẽ trốn vào một góc;)
Smudge

Bạn cũng có thể xem trong các bước này docs.aws.amazon.com/AWSEC2/latest/UserGuide/ mẹo
Artem.Borysov 7/12/2015

Câu trả lời:


74

Bạn đã đúng, hình ảnh Ubuntu EC2 EBS không đi kèm với không gian hoán đổi được định cấu hình ( ít nhất là cho 11.04 ). Các ảnh loại đối tượng "thông thường" có phân vùng trao đổi, mặc dù chỉ có 896 MB trên ảnh tôi đã kiểm tra.

Nếu một số quá trình nổ tung và bạn không có không gian hoán đổi, máy chủ của bạn có thể dừng hoạt động để thu thập thông tin trong khi trước khi kẻ giết người OOM tấn công, trong khi với trao đổi, nó chỉ bị chậm. Vì lý do đó, tôi luôn muốn có không gian hoán đổi xung quanh, thậm chí có đủ RAM. Đây là lựa chọn của bạn:

  • Tạo một khối lượng EBS (gấp 2-4 lần kích thước RAM của bạn), gắn nó vào ví dụ của bạn (tôi thích gọi nó là / dev / xvdm cho "bộ nhớ") sudo mkswap /dev/xvdm, thêm nó vào fstab sudo swapon -avà bạn sẽ ổn . Tôi đã làm điều này trước đây và nó hoạt động tốt, nhưng nó có thể chậm hơn một chút so với cửa hàng cá thể vì nó đi qua mạng.

  • Hoặc bạn có thể phân vùng lại đĩa của mình để thêm phân vùng trao đổi, mặc dù điều này có thể yêu cầu tạo AMI mới. Tôi đã không thể làm điều này trong một phiên bản đang chạy, vì tôi không thể ngắt kết nối hệ thống tập tin gốc và tôi thậm chí không có quyền truy cập vào thiết bị đĩa (/ dev / xvda), chỉ phân vùng (xvda1).

  • Hoặc bạn có thể tạo một tập tin trao đổi. Đây là giải pháp ưa thích của tôi ngay bây giờ.

    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
    

    Làm xong. :) Tôi biết rất nhiều người cảm thấy khó chịu khi sử dụng các tệp thay vì các phân vùng, nhưng nó chắc chắn hoạt động đủ tốt như không gian trao đổi khẩn cấp.


4
Trao đổi với khối lượng EBS có thể dẫn đến chi phí bổ sung, như được chỉ ra bởi các câu trả lời khác. Không sử dụng trao đổi, hoặc trao đổi với một cửa hàng cá thể có vẻ như là giải pháp tốt hơn.
isuldor

7
Sử dụng kho lưu trữ cá thể là một lựa chọn tốt hơn EBS. EBS là một hệ thống tệp mạng, do đó, kết nối với thể hiện EC2 qua cùng một kết nối mạng như mọi thứ khác. Cửa hàng sơ thẩm được gắn vào phần cứng đang lưu trữ cá thể (đó là lý do tại sao nó không tồn tại khi bạn dừng và bắt đầu cá thể của bạn). Lần duy nhất mà EBS là một tùy chọn để trao đổi là khi bạn đang sử dụng một loại thể hiện không đi kèm với bộ lưu trữ cá thể, tức là t1.micro (chỉ cung cấp nó có khoảng 620 MB RAM có lẽ là loại thực sự cần khẩn cấp hoán đổi).
ColtonCat

Số bs = 1M đã có trong ký hiệu nhị phân, do đó, số nhân = 2048 nên được tính = 2000 - nếu tôi không sai.
ypocat

1
Nếu bạn đang dùng 2GiB, thì 1024 * 2048 có vẻ đúng.
Jo Liss

25

Vị trí tốt nhất để trao đổi IMHO là cửa hàng cá thể. Tại sao? AWS không tính phí bạn cho i / o trên cửa hàng cá thể. Ngoài ra, cửa hàng cá thể có hiệu suất cao hơn EBS trong nhiều trường hợp. Chỉ cần đảm bảo rằng bạn có một tập lệnh tạo lại tệp hoán đổi trong trường hợp bạn dừng cá thể. Khởi động lại là tốt. Tại sao oh tại sao nó không ở đó theo mặc định?

Hãy xác định vị trí cửa hàng cá thể.

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

Hurrah, 160.1GB miễn phí! Đặt trao đổi của bạn vào đó và quên 100 đô la cho mỗi máy chủ khi trao đổi dựa trên EBS của bạn bị nhầm lẫn. Kinh nghiệm không may nói chuyện ở đây.

Rõ ràng trong một số trường hợp bạn không thấy cửa hàng cá thể.

Tùy thuộc vào loại thể hiện, trước tiên bạn cần đính kèm khối lượng lưu trữ cá thể vào thể hiện bằng cách sử dụng các tùy chọn ánh xạ khối thiết bị. Nếu bạn không làm điều này, bạn thậm chí có thể không nhìn thấy các thiết bị dưới / dev (theo Cách sử dụng bộ lưu trữ "Instance Store Volume" trong Amazon EC2? )


1
chỉ muốn chỉ ra rằng người dùng t1.micro trên tầng miễn phí không thể sử dụng tùy chọn này.
Reuben L.

20

Lưu ý : Amazon đã thay đổi chính sách giá của họ và không tính phí cho các yêu cầu I / O kể từ giữa năm 2016. Câu trả lời được giữ ở đây vì lý do lịch sử, nhưng không có ý nghĩa chi phí của việc sử dụng (hoặc không sử dụng) trao đổi trên các trường hợp được hỗ trợ bởi EC2 EBS.


Đây là do thiết kế. Hoán đổi được tắt theo mặc định trên các phiên bản được hỗ trợ bởi EC2 EBS, để tránh các chi phí không thể đoán trước.

Nếu bạn có một ứng dụng ngốn bộ nhớ bị lừa đảo (ví dụ, trong một ví dụ nhỏ hoặc nhỏ), nó có thể tạo ra một lượng lớn yêu cầu I / O trên khối lượng EBS của bạn. Amazon tính phí 0,10 đô la cho mỗi 1 triệu yêu cầu I / O (xem http://aws.amazon.com/pricing/ebs/ ) .

Trong điều kiện bình thường, bạn không nên lo lắng về nó; thường là chi phí của các yêu cầu I / O ngay cả trong các trường hợp nhỏ hơn một vài đô la, nếu vậy. Vì vậy, nếu bạn biết bạn có một cá thể có kích thước phù hợp và trao đổi đó sẽ chỉ được sử dụng không thường xuyên, hãy tiếp tục và kích hoạt nó. Nhưng hãy cẩn thận với những trường hợp nhỏ.

Nếu bạn bật trao đổi, bạn có thể muốn theo dõi Báo cáo sử dụng. Theo tùy chọn, bạn cũng có thể thiết lập Thông báo thanh toán bằng cách truy cập Bảng điều khiển CloudWatch và tạo Báo thức mới cho tổng số tiền được lập hóa đơn. Bằng cách này, bạn sẽ được thông báo ngay lập tức là có điều gì đó kỳ lạ đang xảy ra với các trường hợp của bạn.


Câu trả lời này hơi gây hiểu lầm hoặc khó hiểu với tôi vì các loại ví dụ phổ biến nhất sử dụng âm lượng SSD. aws.amazon.com/ec2/instance-types
Taylor Edmiston

2
@tedmiston: thực sự, câu trả lời này không còn áp dụng được nữa. Tôi đã điều chỉnh để phản ánh thực tế mới, nhưng về cơ bản, không có phí cho các yêu cầu I / O, do đó, cho phép trao đổi (hoặc không) có thể được thực hiện trên cơ sở kỹ thuật thuần túy.
Gui Ambros

1

Kiểm tra /etc/fstabtệp, chúng có thể đã được thiết lập mà không trao đổi trong hình ảnh bạn đang sử dụng. Tôi nghĩ rằng một số người chạy mà không trao đổi cho máy chủ vì họ mong đợi không bao giờ sử dụng nhiều hơn tổng bộ nhớ - trao đổi làm cho mọi thứ trở nên siêu chậm.

Tuy nhiên, tôi luôn hoang tưởng về một số quá trình tăng tốc trong bộ nhớ, vì vậy tôi nghĩ rằng sẽ rất khôn ngoan khi bạn chỉ cần thiết lập một ổ đĩa trao đổi và tạo lại một hình ảnh từ phiên bản ec2 đang chạy.


2
Trao đổi thường xuyên không làm cho hệ thống chậm.
laebshade

0

Một giải pháp đơn giản để chạy swaptrong EC2hình ảnh là để chạy swapnén bằng lz4ramvới zram-init.

Giải pháp này không lấy ramđi từ host:

nhập mô tả hình ảnh ở đây


1
Rất sáng tạo, nhưng sẽ không sử dụng RAM của bạn vì RAM thực tế có ý nghĩa hơn so với sử dụng nó làm hệ thống tệp trong bộ nhớ để trao đổi? (chủ yếu được sử dụng khi bạn hết bộ nhớ) Việc giảm dung lượng bộ nhớ khả dụng cho các ứng dụng để tạo ra hoán đổi dường như phản trực giác ...
HBruijn

Câu trả lời thú vị, nhưng tôi nghĩ sử dụng EBS / dụ store có lẽ là một giải pháp cho mục đích chung tốt hơn. Tôi có một t2.nano với RAM 512MB và trao đổi 512 MB trên EBS hoạt động tốt.
Tim

Điều này rõ ràng sẽ lấy RAM từ máy chủ (ví dụ EC2) - RAM đến từ đâu? Lợi ích duy nhất của phương pháp này là nén một phần tổng RAM của bạn, nhưng nó không cung cấp khả năng sử dụng SSD làm trao đổi. Thay vào đó, bạn có thể sử dụng zswapcung cấp bộ đệm RAM được nén trên đầu tệp / đĩa trao đổi thông thường: wiki.archlinux.org/index.php/zswap . Xem cnx-software.com/2018/05/14/ trên để biết thêm về zram.
RichVel
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.