CentOS SWAP bao nhiêu cho 16GB RAM?


11

Bạn sẽ cung cấp bao nhiêu SWAP cho một cài đặt CentOS trên Quad Core XEON kép với 16GB RAM sắp chạy một trang web php với phụ trợ mysql - tải trung bình / nặng?

centos  swap 

Câu trả lời:


20

Không quá một hoặc hai hợp đồng - bạn muốn có một chút trao đổi có sẵn, chỉ trong trường hợp và bởi vì nó giúp mọi thứ hoạt động tốt hơn một chút, nhưng nếu bạn đã đến lúc bạn trao đổi nhiều, máy sẽ hoạt động trở nên vô dụng - và trong một tình huống thảm khốc thực sự, bạn thực sự tốt hơn với một không gian hoán đổi nhỏ hơn, bởi vì sau đó bạn sẽ kích hoạt kẻ giết OOM sớm hơn là sau này.


7
Và hãy nhớ rằng bạn luôn có thể thêm nhiều không gian hoán đổi sau nếu cần bằng cách tạo một số khoảng trống và tạo một ổ đĩa mới (nếu sử dụng LVM) hoặc sử dụng một tệp để trao đổi với một cái gì đó nhưdd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
David Spillett

3
Là một lưu ý phụ, bạn có thể kiểm soát mức độ hoán đổi bằng cách điều chỉnh giá trị / Proc / sys / vm / swappiness.
David

2
Tôi sẽ không đồng ý với một vài điểm ở đây. . . Đầu tiên, đĩa rất rẻ, bạn cũng có thể ném một vài GB vào nó. Thứ hai, kẻ giết người OOM có thể lấy toàn bộ hộp của bạn nếu bạn không may mắn. Dựa vào nó theo bất kỳ cách nào hoặc xem xét nó tốt hơn để kích hoạt kẻ giết người OOM là một ý tưởng rất tồi. Nghĩ rằng một hộp có khả năng hosed tốt hơn một sự chậm lại tiềm năng cũng là một ý tưởng tồi. Thời gian duy nhất hợp lý là nếu bạn có một thiết lập rất cụ thể được lên kế hoạch xung quanh tình huống đó.
Christopher Cashell

lưu ý phụ, thường nên đặt trao đổi thành phân vùng và không phải là tệp để tránh chi phí chung và đơn giản hóa quá trình khởi động. tuy nhiên sử dụng một tập tin sẽ làm việc. 4GB là tất cả mọi hệ thống cần có, tôi nghi ngờ dù sao bạn cũng sẽ bị tráo đổi nhiều với RAM 16gb
Silverfire

Trên thực tế, theo Andrew Morton, hiệu suất nên tương đương nhau giữa một hoán đổi
Journeyman Geek

8

Tôi xin lỗi vì câu trả lời rất dài. Tôi đã muốn đặt công cụ này ở một nơi nào đó có thể truy cập được một lúc!

TLDR; Về mặt lý thuyết, câu trả lời sẽ là "có lẽ không ít hơn tổng dung lượng bộ nhớ lưu trú mà tất cả các ứng dụng của bạn muốn sử dụng"

Tôi sẽ cố gắng giải thích nếu bạn ở lại với tôi ..

Một chút về bộ nhớ ảo

Tôi cảm thấy có một quan niệm sai lầm phổ biến ngày nay về giá trị của trao đổi là gì và mục đích của nó là gì. Nó thường được coi là trao đổi có nghĩa là một 'ngân hàng dự trữ' cho bộ nhớ khi bạn sắp hết bộ nhớ. Vâng, điều này đúng một phần, nhưng hạt nhân không muốn sử dụng trao đổi của bạn như một ngân hàng dự trữ . Ngoài ra , kernel không bao giờ muốn gọi đĩa để lấy dữ liệu bạn đang theo dõi!

Trong không gian ứng dụng, có một số thứ mà kernel sẽ lưu giữ trong bộ nhớ.

  • Dữ liệu tập tin đã ánh xạ.
  • hệ thống tập tin tmpfs.
  • Bộ nhớ ứng dụng thô được phân bổ trong thời gian chạy.
  • Mã ứng dụng (chẳng hạn như nội dung trong phân đoạn dữ liệu của các định dạng ELF)
  • Dữ liệu tập tin riêng tư.

Với mục đích quản lý bộ nhớ, việc cấp phát bộ nhớ được hỗ trợ dưới dạng này hay dạng khác bởi một thiết bị hỗ trợ.

Bộ nhớ được hỗ trợ tệp là bộ nhớ xuất phát từ một tệp và trên O / S điển hình chiếm phần lớn phân bổ bộ nhớ trên hệ thống. Nó bao gồm các tệp như thư viện dùng chung đã được tải, tệp đọc từ đĩa và được lưu trong bộ đệm của trang và tệp được ghép từ đĩa (thực tế, kernel không phân biệt các trang giữa các tệp trong bộ đệm của trang và các tệp được ghép vào như bản chất của nó điều tương tự).

Điều tuyệt vời về bộ nhớ này từ quan điểm của hạt nhân là khả dụng của nó, đó là có thể bỏ các trang này nếu bạn cần bộ nhớ cho thứ khác và đây chính xác là những gì bộ đệm trang làm nếu bộ nhớ đột ngột là một yêu cầu.

Bộ nhớ được ẩn danh là một vấn đề khác. Bộ nhớ từ vùng này là ẩn danh vì, không có tệp nào trên đĩa thực sự chứa dữ liệu này. Điều này thường được tạo thành từ ngăn xếp ứng dụng, heap, bất cứ thứ gì trong tmpfs và dữ liệu được khai thác là riêng tư và đã được sửa đổi (vì nó không thể đồng bộ hóa nội dung này trở lại đĩa). Vì không có tệp hợp lệ trên hệ thống tệp để ghi lại các trang này nếu chúng thay đổi, bộ nhớ được hỗ trợ ẩn danh được hỗ trợ bởi phương tiện trao đổi.

Bây giờ, kernel biết rằng khi bộ nhớ khan hiếm, việc bỏ đi bộ nhớ sao lưu bộ nhớ ẩn danh rẻ hơn rất nhiều, đó là vì dữ liệu ẩn danh có khả năng bị "bẩn" cao hơn nhiều so với dữ liệu được hỗ trợ bởi tập tin, mặc định là kernel đánh giá bộ nhớ được hỗ trợ ẩn danh là có giá trị gấp 80 lần so với bộ nhớ được hỗ trợ tập tin và đây thực sự là công cụ sửa đổi swappiness làm trên linux (xem bài đăng này ở đây nếu bạn muốn biết chính xác tham số swappiness đang thay đổi).

Trường hợp xấu nhất

Trường hợp xấu nhất xảy ra khi máy chủ mất kiểm soát và OOMing dựa trên thực tế là nó dành quá nhiều thời gian để xử lý các yêu cầu I / O hơn là thực hiện các yêu cầu cấp phát bộ nhớ. Có hai điều kiện có thể gọi tiêu chí này.

  • Trao đổi bộ nhớ ẩn danh mọi lúc để tìm nạp các trang theo yêu cầu hoặc phân bổ nhiều trang hơn cho một ứng dụng.
  • Dành quá nhiều thời gian để tìm nạp dữ liệu từ đĩa vì nó không có trong bộ nhớ so với khi bạn thực hiện các tiến trình muốn có thời gian CPU.

Đầu tiên, là suy nghĩ thường gặp của vấn đề. Đó là, vì rất nhiều bộ nhớ sống bên trong trao đổi, người ta cần trao đổi bộ nhớ ẩn danh ra khỏi RAM, đưa nó trở lại trao đổi, sau đó lấy một cái gì đó từ trao đổi và đưa vào RAM thực. Thao tác này rất tốn kém, làm chậm máy đến mức có thể trở thành tình huống không thể phục hồi (vì nhiều thứ đang xếp hàng cho nhu cầu trang hơn so với những gì có thể được phục vụ từ I / O).

Cái thứ hai ít được xem xét nhưng cũng quan trọng không kém. Nếu bạn phân bổ gần như toàn bộ bộ nhớ của mình cho dữ liệu ứng dụng thực - bạn sẽ không tồn tại lâu. Gần như mọi ứng dụng phụ thuộc vào việc đọc các tệp từ hệ thống tệp để vận hành, điều này có thể là do một số hướng dẫn sống trong thư viện dùng chung hoặc vì bạn cần đọc /etc/resolv.conf cho một cuộc gọi thư viện hoặc bất kỳ mục đích nào khác. Hoàn toàn hợp lý để tạm dừng một hệ điều hành - vẫn có đủ bộ nhớ để phù hợp với tất cả các ứng dụng của bạn, nhưng vì việc xếp hàng quá nhiều yêu cầu I / O của bạn nên không có cơ hội hoàn thành đúng.

Hạt nhân muốn làm gì với trao đổi của bạn

Nhân muốn sử dụng trao đổi của bạn để loại bỏ các trang đang lãng phí bộ nhớ để nó có thể sử dụng bộ nhớ đó cho mục đích khác.

Về cơ bản, trong hoạt động bình thường, kernel thích tích cực lấp đầy bộ đệm trang với dữ liệu đọc từ đĩa, điều này có nghĩa là nó sẽ không đọc đĩa cho cùng một dữ liệu. Đây là thiết kế tốt và có thể giảm I / O ồ ạt. Bây giờ, có thể bạn có một số ứng dụng nằm trong bộ nhớ ngủ 3 ngày, thức dậy, thực hiện một loạt công việc sau đó ngủ thêm 3 ngày nữa.

Thay vào đó, hạt nhân muốn làm gì với dữ liệu này là trao đổi nó để tạo không gian cho hoạt động của hệ thống tập tin, vì bạn có cơ hội thực sự sử dụng các trang này thường xuyên hơn so với các trang bạn sử dụng cho ứng dụng của mình. Trao đổi, theo nghĩa này có thể là một giao dịch 16kb cho phương tiện trao đổi của bạn mà bạn khó có thể cảm thấy, nhưng bù lại, bạn đã giải phóng 16kb bộ nhớ có thể được sử dụng để lưu trữ bốn tệp dữ liệu.

Những gì kernel không muốn sử dụng trao đổi cho

Kernel chắc chắn không muốn sử dụng trao đổi của bạn để phân bổ thêm bộ nhớ ẩn danh bằng cách hoán đổi một số bộ nhớ ẩn danh khác, đây là tình huống mọi người lo lắng nhất và đúng như vậy.

Tuy nhiên, tôi nên chỉ ra rằng nếu bạn đã phân bổ quá nhiều bộ nhớ mà kernel không có lựa chọn nào khác ngoài việc này, thì đây là vấn đề cấu hình của các quản trị viên hệ thống, chứ không phải chính kernel - nó chỉ cố gắng làm tốt nhất tùy chọn bạn đã đưa ra!

Nếu bạn có một lượng trao đổi khổng lồ, bạn có tăng cơ hội sử dụng nó không?

Không! Nếu bạn có 1G ram và 4G trao đổi, không có 80% khả năng dữ liệu của bạn bị hoán đổi! Hạt nhân chỉ muốn sử dụng trao đổi khi các trang trong bộ nhớ có thể được phục vụ tốt hơn khi làm việc khác!

Có thuận lợi không khi sử dụng trao đổi

Tôi sẽ không bao giờ làm điều này. Trao đổi cho phép O / S loại bỏ bộ nhớ bạn cần có nhưng không bao giờ được sử dụng. Nếu bạn không có trao đổi, bộ nhớ của bạn sẽ không bao giờ lấy lại được, mà bạn có thể thấy một sự cải thiện hiệu suất đáng kể bằng cách cho phép, thay vào đó, bộ đệm trang sẽ có nó.

Trao đổi tốt nhất để có

Về mặt lý thuyết, hãy tìm hiểu bao nhiêu bộ nhớ thường trú + 20% cho các bộ lưu trữ như gọi lại thư viện phải phân bổ bộ nhớ từ đống - sau đó đặt số tiền trao đổi của bạn thành số tiền đó. Điều này (về mặt lý thuyết dù sao) sẽ cho phép hệ điều hành trao đổi tất cả bộ nhớ ẩn danh nếu nó phải nhường chỗ cho thứ gì đó hữu ích hơn.

Nếu tôi có cơ hội kernel để trao đổi mọi thứ nguy hiểm phải không?

Hãy nhớ rằng, kernel không muốn trao đổi để nhường chỗ cho việc cấp phát bộ nhớ ẩn danh nhiều hơn ở đây, nó sẽ chỉ trao đổi các trang không được sử dụng để ưu tiên một cái gì đó sẽ sử dụng không gian tốt hơn thay thế.

Nếu việc hoán đổi bộ nhớ anon của bạn chỉ để phân bổ từ bộ nhớ ẩn danh nhiều hơn, bạn đã làm gì đó sai và cần thêm RAM hoặc để điều chỉnh lại ngăn xếp ứng dụng của bạn.

Bạn cần bao nhiêu RAM

Bạn cần phải cho phép đủ RAM để chạy tất cả các ứng dụng của mình, nhưng có lẽ bạn nên cho phép thêm 2G RAM cho pagecache để lấp đầy - có thể nhiều hơn. Bộ nhớ cache trang làm cho máy tính của bạn nhanh hơn nhiều và đĩa của bạn tồn tại lâu hơn. Nếu bạn nghĩ đến việc chạy một máy chủ web, thậm chí nhiều hơn cho pagecache là một ý tưởng tốt do lượng nội dung tĩnh tuyệt đối bạn có thể truy xuất và sử dụng lại từ pagecache sẽ được phục vụ (nếu thông lượng máy chủ web của bạn là 5mb / s, bạn thực sự không muốn lấy lại nội dung 5mb / s mà bạn tạo từ đĩa của mình!).

Phải làm gì nếu bạn thực sự không tin tưởng linux để trao đổi đúng cách

Nếu bạn thực sự quan tâm, bạn có thể phân bổ nhiều bộ nhớ hơn bạn có:

  • Đặt số tiền trao đổi của bạn không nhiều hơn RAM của bạn
  • Đặt / Proc / sys / vm / overcommit_memory thành 2
  • Đặt / Proc / sys / vm / overcommit_ratio là một giá trị không bao giờ thực sự vượt quá giới hạn RAM vật lý. Xem tài liệu kernel để biết con số đó sẽ là gì với bạn.

Cách tốt nhất để điều chỉnh bộ nhớ cho ứng dụng của tôi

  • Hiểu những gì swappiness thực sự làm.
  • Sử dụng Cgroup để phân bổ tài nguyên chính xác cho mỗi ứng dụng.
  • Thay đổi chế độ overcommit được đề cập ở trên để làm cho hệ điều hành thực thi các giới hạn nghiêm ngặt.
  • Sử dụng các nhóm như trên để đặt ưu tiên OOM cho các ứng dụng bạn thực sự muốn giữ nếu hết bộ nhớ và ứng dụng mà bạn thực sự muốn bỏ nếu hết bộ nhớ.

Nhà cung cấp đề xuất một cấu hình khác nhau ..

Nghe mà thay vào đó. Một số ứng dụng được viết theo cách chúng cố tình gọi kernel để các trang của chúng hoạt động trên tất cả các ứng dụng khác. Đây là một mẹo khó chịu để thành thật nhưng nó phá vỡ khả năng quản lý bộ nhớ liền mạch khi nó xảy ra. Nếu nhà cung cấp của bạn cung cấp cho bạn thông tin cụ thể thì họ có thể rơi vào danh mục này và lắng nghe những gì họ nói thay vào đó.

Tóm tắt

  • Hoán đổi có nghĩa là được sử dụng như một nơi để đặt bộ nhớ lãng phí. Không phải là 'bộ nhớ dự phòng'
  • Có số lượng lớn trao đổi không ảnh hưởng gì đến cơ hội sử dụng của bạn.
  • Kernel thực sự muốn ngăn bạn truy cập đĩa cho dữ liệu của bạn. Điều này áp dụng giống như - nếu không bằng với bộ đệm trang cũng như trao đổi không gian.
  • Nhân sẽ cố gắng hết sức để tôn vinh cài đặt bạn cung cấp cho ứng dụng bạn chạy. Nhưng đừng ngạc nhiên nếu bạn OOM nếu bạn có 500 trẻ em apache, tất cả chiếm 32M bộ nhớ. Đó là lỗi của cấu hình bạn chọn, không phải quản lý bộ nhớ.

Nhân thường làm rất tốt việc quản lý bộ nhớ ảo đúng cách. Hầu như luôn luôn là trường hợp ứng dụng của bạn phân bổ nhiều bộ nhớ hơn mức bạn có thể hy vọng để làm việc cùng và đó là điều gây ra OOM.

Hoán đổi từng được sử dụng như 'bộ nhớ dự phòng', nhưng nó không còn là mục đích chính của nó nữa, vì vậy đừng nghĩ đến việc sử dụng nó như thế. Thay vào đó, đánh giá cao rằng hạt nhân của bạn có thể biết rõ nhất những gì nó muốn sử dụng bộ nhớ của bạn cho. Cung cấp cho nó không gian để đưa ra những quyết định đó và bạn sẽ được hưởng lợi từ việc cải thiện hiệu suất tổng thể.


2

Từ tài liệu "Máy chủ Oracle 10g trên Red Hat® Enterprise Linux® 5 Khuyến nghị triển khai".

Oracle cung cấp các khuyến nghị chung về quy mô trao đổi trong MetaLink Note 169706.1. Những khuyến nghị này có thể dẫn đến việc tạo ra không gian hoán đổi rất lớn trên các hệ thống có dung lượng bộ nhớ lớn. Việc hoán đổi rất lớn có thể gây suy giảm hiệu năng hệ thống và có thể được giải quyết bằng cách giảm không gian hoán đổi. Red Hat không khuyến nghị phân bổ lớn hơn 4GB để trao đổi trên Red Hat Enterprise Linux 5.

Vì vậy, đối với 16GB, bạn không nên có nhiều hơn 4GB trao đổi.

Tái bút Ngoài ra, đáng lưu ý rằng oomhầu như luôn luôn tốt hơn quá trình hoán đổi không sử dụng được bằng cách sử dụng toàn bộ băng thông I / O.



-1

Từ những gì tôi nhớ lại từ tài liệu linux: Nếu ram của bạn lớn hơn 2gb thì bạn thực hiện trao đổi = (ramSize + 2). Nếu nó ít hơn thì bạn thực hiện trao đổi = (ramSize * 2)


-2

Tôi tìm thấy tài liệu này cho bạn, nó sẽ giúp bạn đưa ra quyết định, đây là: Swap Space là gì? , nhưng cả hai câu trả lời trên đều không đúng


1
Tài liệu bạn liên kết đến không đồng ý với chính nó. Theo quy tắc đã nêu "để có thêm RAM 2Gb RAM trên 2Gb" sẽ trao đổi 1Gb cho RAM 3Gb (3-2 = 1) chứ không phải 5Gb.
David Spillett
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.