Tôi có nên tắt hoàn toàn trao đổi cho máy chủ web linux?


22

Gần đây, bạn tôi nói với tôi rằng nên tắt trao đổi trên máy chủ web linux với đủ bộ nhớ. Máy chủ của tôi có 12 GB và hiện đang sử dụng 4GB (không tính bộ đệm và bộ đệm) trong tải tối đa.

Lập luận của ông là trong một tình huống bình thường, máy chủ sẽ không bao giờ sử dụng tất cả RAM của nó, vì vậy cách duy nhất nó có thể gặp phải tình huống OutOfMemory là do một số lỗi / ddos ​​/ vv. Vì vậy, trong trường hợp trao đổi bị tắt, hệ thống sẽ hết bộ nhớ, cuối cùng sẽ làm hỏng bộ nhớ ăn cắp chương trình (rất có thể là quá trình máy chủ web) và có thể một số quy trình khác. Trong trường hợp hoán đổi được bật trênnó sẽ ăn cả RAM và trao đổi và cuối cùng sẽ dẫn đến cùng một sự cố, nhưng trước đó nó sẽ giảm tải các quá trình quan trọng như sshd để trao đổi và bắt đầu thực hiện nhiều hoạt động hoán đổi dẫn đến chậm lớn. Theo cách này, khi hệ thống ddos ​​có thể rơi vào tình trạng hoàn toàn không sử dụng được do độ trễ lớn và tôi có lẽ sẽ không thể đăng nhập và giết quá trình máy chủ web hoặc từ chối tất cả lưu lượng truy cập đến (tất cả trừ ssh).

Thê nay đung không? Tôi có thiếu thứ gì không (như thực tế là phân vùng trao đổi rất hữu ích theo một cách nào đó ngay cả khi tôi có đủ RAM)? Tôi có nên tắt nó đi không?


6
Vì vậy, tất cả các câu trả lời đều rút ra những tuyên bố rằng 1. bộ nhớ ảo tốt hơn vô điều kiện tốt hơn ít hơn và 2. phải có một số hoán đổi được kích hoạt bởi vì nó không tốt trong số đó.
NekojiruSou

2
Thật sai lầm khi nghĩ rằng trao đổi chỉ dành riêng cho bộ nhớ 'dự trữ'. Hoán đổi có nghĩa là một nơi để đặt bộ nhớ không sử dụng (vì vậy bạn có thể sử dụng bộ nhớ thực tế của mình hiệu quả hơn). Bạn nên luôn luôn có trao đổi. Nếu bạn hết bộ nhớ, thì bạn hết bộ nhớ. Đây là một vấn đề của quản lý năng lực - không có xu hướng trao đổi. Tôi có một máy chủ phản hồi khá dài serverfault.com/a/332205/75118 cố gắng giải thích rõ hơn về ý định bộ nhớ ảo.
Matthew Ife

Câu trả lời:


27

Tôi muốn nói rằng nó phụ thuộc vào trường hợp sử dụng của bạn và phần còn lại của câu trả lời đã bao gồm điều này khá tốt. 4G của trao đổi là một cách rẻ tiền để mua một số an toàn. Và tôi cảm thấy rằng sự rẻ tiền này là thứ đang khiến mọi người không muốn tắt nó đi.

Nhưng hãy để tôi trả lời bằng một câu hỏi tu từ. Nếu tiền không phải là vấn đề và bạn có lựa chọn giữa hai hệ thống - một hệ thống có 12G RAM và 4G trao đổi, và hệ thống khác có 16G RAM và không có trao đổi - bạn sẽ chọn hệ thống nào? Thật không may, hầu hết mọi người vẫn trả lời rằng họ sẽ chọn 16G RAM và vẫn thêm 4G trao đổi, điều này thiếu quan điểm của tôi.

Và trên một lưu ý khác, cá nhân tôi thấy một hệ thống swappy tồi tệ hơn một hệ thống bị lỗi. Một hệ thống bị sập sẽ kích hoạt một máy chủ sao lưu dự phòng để tiếp quản sớm hơn nhiều. Và trong một thiết lập hoạt động tích cực (hoặc thiết lập cân bằng tải), một hệ thống bị hỏng sẽ được đưa ra khỏi vòng quay sớm hơn nhiều. Một chiến thắng cho hệ thống không trao đổi một lần nữa.


14

KHÔNG nên tắt trao đổi ngay cả khi bạn có đủ bộ nhớ. Nếu máy chủ của bạn cần thêm bộ nhớ và không có được nó, nó sẽ bị sập. Tuy nhiên, điều này có thể được ngăn chặn (ở một mức độ nào đó) khi bạn có một khu vực trao đổi.

Có, hiệu suất máy chủ của bạn sẽ giảm khi sử dụng trao đổi, nhưng ít nhất nó sẽ hoạt động và có thể truy cập được. Sau đó, bạn có thể lập kế hoạch để thêm bộ nhớ khi cần nếu máy chủ của bạn bắt đầu sử dụng trao đổi.

Tôi tìm thấy trang này nói về trao đổi. Có một cái nhìn vào phần 3.

Thay vì tắt swap, bạn có thể kiểm soát swapiness .


1
Trong tình huống tôi mô tả, nó sẽ tiêu thụ cả trao đổi và RAM và cũng sẽ sụp đổ. Nó đang chạy trong một vài tháng và nó không bao giờ sử dụng hơn 30% bộ nhớ. Vì vậy, rất khó có khả năng nó sẽ nhảy lên 100% nhanh như vậy trong quá trình hoạt động bình thường. Vì vậy, nếu một số quá trình trở nên điên rồ và tiêu thụ 8GB, điều đó có nghĩa là nó sẽ tiêu thụ nhiều bộ nhớ như HĐH có thể có, điều đó có nghĩa là tất cả.
Poma

@Poma, có những lợi ích khác của trao đổi là tốt. Ngoài ra, bạn có thể cho phép hệ thống sống lâu hơn khi bạn có một trao đổi. Điều này là do trao đổi có thể lớn hơn bộ nhớ do có sẵn các ổ đĩa HD giá rẻ.
Khaled

6

Không, nó không phải là một ý tưởng tốt. 'một số quá trình trở nên điên rồ' có nghĩa là bạn nên chủ động gọi

ulimit -d

tại hoặc trước thời gian tạo quy trình để đặt giới hạn cho mỗi bộ nhớ phân đoạn dữ liệu quy trình - Và có thể giới hạn số lượng luồng

ulimit -T

mỗi quá trình. ulimit là bạn của bạn. Vui lòng xem xét việc đọc một trong các hướng dẫn điều chỉnh bộ nhớ trước khi bạn tắt trao đổi. Bạn cũng có thể thay đổi các kernel kernel thành một số thứ để cố gắng xử lý các cuộc tấn công DOS hoặc các chương trình xấu.

Nhìn vào nó theo cách này: Tổng bộ nhớ trên hệ thống của bạn là RAM + trao đổi. Nếu bạn có 12GB trao đổi, bạn chỉ cần giảm một nửa hiệu quả dung lượng VM hệ thống, bằng cách vô hiệu hóa trao đổi. Ý kiến ​​tồi. Đây thực sự không phải là một cuộc tranh luận, nó chỉ đơn giản là đọc những gì người khác đã biết từ những trải nghiệm tồi tệ trước đây trong nhiều năm. Có thể bạn của bạn cũng cần đọc một số bài.


5

Như những người khác đã nói, bạn có thể ngăn chặn máy chủ của mình một cách hiệu quả bằng cách sử dụng trao đổi trừ khi thực sự cần thiết bằng cách sửa đổi thông số "swappiness". Điều này kiểm soát mức độ mạnh mẽ của hạt nhân sẽ trao đổi các trang bộ nhớ.

Bạn có thể thấy những gì nó hiện được đặt với:

cat /proc/sys/vm/swappiness

và bạn có thể chỉnh sửa nó "trực tiếp" với (với quyền root):

# echo "10" > /proc/sys/vm/swappiness

và để duy trì nó, hãy thêm đoạn sau vào /etc/sysctl.conf:

vm.swappiness=10

2

Một điều tốt khác mà bạn có thể làm là trao đổi vào RAM bằng zRAM. Tôi nghĩ rằng đây là một ý tưởng tuyệt vời! Đối với hiệu suất, giống như không có trao đổi, nhưng cũng ngăn ngừa sự cố khi hệ thống được tải rất nhiều!

Nhìn vào cái này

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

Kinh nghiệm của tôi: Trong chiếc máy mà tôi đang viết bây giờ, tôi đã vô hiệu hóa trao đổi, vì tôi có RAM 4Gb (năm 2009 là rất nhiều!). Tôi chỉ gặp một vài vấn đề, một trong số đó là mở nhầm 127 bức ảnh cùng một lúc!

NHƯNG .. đây là một máy trạm và tôi có thể đủ khả năng để khởi động lại nếu nó bị treo. Trong một máy chủ, tôi nghĩ là tốt hơn để có trao đổi, và trao đổi trong RAM có vẻ tốt với tôi.


1

Như đã được làm rõ ràng rất nhiều, đây không phải là một ý tưởng tốt. Nếu không có gì khác, trao đổi cung cấp cho bạn một số không gian thở khi mọi thứ không hoàn toàn bình thường. ví dụ: Trên một hệ thống tôi nhìn, thường chỉ có một vài khách truy cập mỗi ngày, đã có một lưu lượng truy cập lớn gây ra bởi một trang được đề cập trong một tạp chí. Điều này dẫn đến máy chủ web sử dụng không gian hoán đổi lần đầu tiên kể từ khi nó được đưa vào vận hành. Không có không gian hoán đổi đó, mọi thứ sẽ không diễn ra tốt đẹp.


0

Không phải là một ý tưởng tốt. Bạn có thể xác định 2 tệp hoán đổi với mức độ ưu tiên khác nhau. Một cái nhỏ hơn đang được sử dụng và một cái lớn hơn sẽ được sử dụng trong trường hợp lấp đầy đầu tiên.

Ngoài ra vm.swappiness có thể giúp bạn kiểm soát việc hoán đổi đĩa xảy ra mạnh mẽ như thế nào.


0

Nếu bạn chèn 0 đến vm.swappiness, điều đó không nhất thiết có nghĩa là hệ thống sẽ không trao đổi. Đó là một tham số để xác định xu hướng tích cực của kerne sẽ hoán đổi như thế nào nhưng nó không tắt trao đổi.

Một lần nữa, trao đổi không phải là xấu nhưng đập là. Hãy xem dữ liệu sysstat và điều đó sẽ cho con trỏ khá tốt trên đó.

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.