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?
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?
Câu trả lời:
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.
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ớ.
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.
Đầ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ó:
Cách tốt nhất để điều chỉnh bộ nhớ cho ứng dụng của tôi
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
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ể.
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 oom
hầ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.
Các khuyến nghị hoán đổi CentOS hiện tại sử dụng công thức:
M = Amount of RAM in GB, and S = Amount of swap in GB, then
If M < 2
S = M *2
Else
S = M + 2
Vì vậy, đối với 16G, số lượng trao đổi nên là 18G.
Xem http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-swapspace.html
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)
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
dd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file