2011-06-26 5 views
25

Tôi đang cố gắng chạy RabbitMQ trên một VPS nhỏ (RAM 512MB) cùng với Nginx và một vài chương trình khác. Tôi đã có thể tinh chỉnh việc sử dụng bộ nhớ của tất cả mọi thứ khác mà không gặp khó khăn, nhưng tôi dường như không thể có được RabbitMQ để sử dụng bất kỳ RAM ít hơn.Giảm mức sử dụng bộ nhớ RabbitMQ

Tôi nghĩ rằng tôi cần phải giảm số lượng chủ đề Erlang sử dụng cho RabbitMQ, nhưng tôi đã không thể làm cho nó hoạt động. Tôi cũng đã thử đặt vm_memory_high_watermark thành một vài giá trị khác nhau bên dưới giá trị mặc định (40%), thậm chí thấp đến 5%.

Một phần của vấn đề có thể là nhà cung cấp VPS (MediaTemple) cho phép tôi đi qua bộ nhớ được cấp phát, vì vậy khi sử dụng miễn phí hoặc trên cùng, nó cho thấy máy chủ có khoảng 900mb.

Bất kỳ đề xuất nào để giảm mức sử dụng bộ nhớ của RabbitMQ hoặc giới hạn số lượng chuỗi mà Erlang sẽ tạo? Tôi tin rằng Erlang đang sử dụng 30 chủ đề, dựa trên cờ -A30 mà tôi đã nhìn thấy trên lệnh quá trình.

Lý tưởng nhất là tôi muốn sử dụng tính năng ghi nhớ RabbitMQ dưới 100mb.

Edit:

Với vm_memory_high_watermark bộ đến 5% (hoặc 0,05 trong file config), các bản ghi RabbitMQ báo cáo rằng giới hạn bộ nhớ RabbitMQ được thiết lập để 51mb. Tôi không chắc 51mb đến từ đâu. Hiện tại VPS phân bổ bộ nhớ là 924mb, vì vậy 5% trong số đó nên được khoảng 46mb.

Theo htop/miễn phí trước khi khởi động RabbitMQ, tôi đang ngồi khoảng 453mb RAM đã qua sử dụng, và sau khi bắt đầu, RabbitMQ tôi có khoảng 650mb. Tăng gần 200mb. Nó có thể là 200mb là giới hạn thấp hơn mà RabbitMQ sẽ chạy với?

Chỉnh sửa 2

Here are some screenshots của ps aux và miễn phí trước và sau khi bắt đầu RabbitMQ và một biểu đồ hiển thị các cành nhớ khi RabbitMQ được bắt đầu.

Sửa 3

Tôi cũng đã kiểm tra không có plug-in được kích hoạt, và nó làm cho rất ít sự khác biệt. Có vẻ như các plugin tôi đã có (quản lý và điều kiện tiên quyết của nó) chỉ được thêm vào khoảng 8mb sử dụng ram.

Sửa 4

tôi không còn có máy chủ này để thử nghiệm với, tuy nhiên, có một conf thiết delegate_count được thiết lập để mặc định của 16. Theo như tôi biết, điều này sinh ra 16 sup- procs cho thỏmq. Giảm số này trên các máy chủ nhỏ hơn có thể giúp giảm bớt dấu chân bộ nhớ. Không có ý tưởng nếu điều này thực sự hoạt động, hoặc làm thế nào nó tác động đến hiệu suất, nhưng nó là một cái gì đó để thử.

Trả lời

9

Cách thích hợp để giới hạn mức sử dụng bộ nhớ trong RabbitMQ là sử dụng vm_memory_high_watermark. Bạn nói:

Tôi cũng đã cố gắng thiết lập các vm_memory_high_watermark đến vài giá trị khác nhau dưới mặc định (của 40%), thậm chí nhỏ nhất là 5%.

Điều này có thể không hoạt động theo cách bạn mong đợi.Trong nhật ký, bạn sẽ tìm thấy một dòng cho bạn biết bộ nhớ giới hạn tuyệt đối là gì, một cái gì đó như thế này:

=INFO REPORT==== 29-Oct-2009::15:43:27 === 
Memory limit set to 2048MB. 

Bạn cần phải tinh chỉnh giới hạn bộ nhớ khi cần thiết - Thỏ có thể được nhìn thấy hệ thống của bạn là có một nhiều RAM hơn bạn nghĩ rằng nó có nếu bạn đang chạy trên một môi trường VPS.

Đôi khi, Thỏ không thể biết bạn đang sử dụng hệ thống nào và sử dụng 1GB làm điểm cơ sở (vì vậy bạn sẽ nhận được giới hạn 410MB theo mặc định).

Ngoài ra, hãy đảm bảo bạn đang chạy trên phiên bản của RabbitMQ hỗ trợ cài đặt vm_memory_high_watermark - lý tưởng bạn nên chạy với bản phát hành ổn định mới nhất.

+0

Khi tôi sử dụng 'vm_memory_high_watermark', báo cáo giới hạn ram chính xác trong nhật ký (dựa trên 900mb thực tế của VPS, không phải 512MB tôi đã mua). Khi thiết lập đến 5% các bản ghi cho thấy 45MB, nhưng mỗi quá trình erlang sinh ra được sử dụng giữa 20 và 25mb ram, mà nhanh chóng đưa tôi qua phân bổ 512MB của tôi. –

+0

Khi bạn nói 'mỗi quá trình erlang' bạn có nghĩa là, quá trình erlang OS hoặc quá trình nội bộ erlang? –

+0

Khi tôi chạy htop, tôi thấy 30 hoặc hơn '/usr/lib/erlang/erts-5.7.4/bin/beam.smp -W w -K true -A30-P 1048576' và sau đó một số cờ liên quan đến RabbitMQ và mnesia. –

1

Đảm bảo đặt giá trị tìm nạp trước QoS phù hợp. Theo mặc định, nếu có một máy khách, máy chủ Rabbit sẽ gửi bất kỳ tin nhắn nào cho hàng đợi của máy khách đó đến máy khách. Điều này dẫn đến việc sử dụng bộ nhớ mở rộng cả trên máy khách & máy chủ.

Giảm giới hạn tìm nạp xuống một thứ gì đó hợp lý, như nói 100 và Rabbit sẽ giữ các thư còn lại trên đĩa trên máy chủ cho đến khi máy khách thực sự sẵn sàng xử lý chúng và mức sử dụng bộ nhớ của bạn sẽ giảm dần máy khách & máy chủ.

Lưu ý rằng đề xuất 100 chỉ là một nơi hợp lý để bắt đầu - chắc chắn nhịp đập vô cùng. Để thực sự tối ưu hóa con số đó, bạn sẽ muốn xem xét các thông điệp/giây mà khách hàng của bạn có thể xử lý, độ trễ của mạng của bạn và mức trung bình của mỗi tin nhắn của bạn.