25

Tôi đang chạy ứng dụng Ruby on Rails trên máy chủ Linux ảo có giới hạn ở mức RAM 1 GB. Hiện tại, tôi liên tục đạt đến giới hạn và muốn tối ưu hóa việc sử dụng bộ nhớ. Một lựa chọn tôi đang xem là giảm số lượng công nhân kỳ lân.Unicorn: Số quy trình công nhân nào cần sử dụng?

Vậy cách tốt nhất để xác định số lượng công nhân kỳ lân sử dụng là gì?

Cài đặt hiện tại là 10 công nhân, nhưng số lượng yêu cầu tối đa mỗi giây tôi thấy trên Google Analytics Thời gian thực là 3 (chỉ ghi một lần vào thời gian cao điểm; 99% thời gian không vượt quá 1 yêu cầu mỗi giây).

Vì vậy, đó là một giả định tiết kiệm mà tôi có thể - bây giờ - đi với 4 công nhân, để lại chỗ cho số lượng yêu cầu bất ngờ? Các số liệu nào tôi nên xem xét để xác định số lượng công nhân và các công cụ tôi có thể sử dụng cho máy tính Ubuntu của mình là gì?

Trả lời

42

Số lượng công nhân bạn nên sử dụng phụ thuộc rất nhiều vào những gì ứng dụng của bạn đang hoạt động và cách thức hoạt động của những thứ đó. Có thực sự không phải là một công thức tỷ lệ hoàn hảo cho nó không may mà sẽ làm việc trong mọi trường hợp thử nghiệm duy nhất. Điều này càng trở nên đúng hơn khi bạn tính đến thực tế là bạn có một lượng RAM hữu hạn mà bạn phải giữ máy chủ của mình.

Nhiều người sẽ đề xuất rằng CPU Core Count + 1 nhưng điều đó cũng không chính xác. Bạn sẽ phải làm các trường hợp thử nghiệm với số lượng công nhân khác nhau có mặt và xem mọi thứ diễn ra như thế nào. Hãy chắc chắn kiểm tra nhật ký thường xuyên.

Trong nhóm chúng tôi, chúng tôi sử dụng một chương trình gọi là Nagios: http://www.nagios.org

Nó hoạt động tốt và có thể kiểm tra máy chủ của bạn cho nhiều điều khác nhau mà có thể xảy ra và thậm chí cảnh báo bạn đối với họ. Điều này có thể giúp bạn rất nhiều khi cố gắng tìm sự cân bằng hoàn hảo.

Ngoài ra, đôi khi có những thứ mà máy chủ của bạn đang thực hiện ngoài việc chỉ chạy các phiên bản đường ray của bạn, nó có thể đang chạy tập lệnh hoặc xử lý thông tin không cần thiết. Hãy chắc chắn rằng máy chủ của bạn không làm những việc mà nó không cần phải làm, theo cách đó bạn tiết kiệm được nhiều chu kỳ CPU và RAM nhất có thể.

Ngoài ra, hãy chắc chắn rằng bạn đang thực hiện tính năng này mà Unicorn có, chúng ta làm trong các dự án của chúng tôi và nó là vô giá:

Memory Growth Khi một công nhân đang sử dụng quá nhiều bộ nhớ, thần hoặc monit có thể gửi cho nó tín hiệu QUIT. Điều này cho người lao động chết sau khi hoàn thành yêu cầu hiện tại. Ngay sau khi người lao động chết, chủ nhân sẽ lấy một số cái mới có thể phục vụ ngay lập tức. Bằng cách này, chúng tôi không phải hủy kết nối giữa yêu cầu của bạn hoặc thực hiện hình phạt khởi động . - Trích từ: https://github.com/blog/517-unicorn

Tôi cũng thấy câu hỏi này tương tự mà có thể cung cấp cho bạn một số cái nhìn sâu sắc:

https://serverfault.com/q/369811/110682

Tôi hy vọng rằng sẽ giúp.

+0

Cảm ơn bạn rất nhiều vì câu trả lời sâu sắc và thời gian bạn đầu tư bằng văn bản này. Tôi thấy nó rất hữu ích! – emrass

+0

@ blackbird07 Bạn được chào đón, tôi rất vui vì tôi đã có thể giúp bạn. Chúc may mắn với tối ưu hóa bộ nhớ. –

Các vấn đề liên quan