2016-11-20 20 views
5

Tôi đang cố gắng tối ưu hóa hiệu suất của các thùng chứa Cassandra (3.7+) Docker. Tôi tìm thấy a presentation from 2015 đã đề cập (trên trang trình bày 21) mà tôi nên cấp CAP_IPC_LOCK và đặt khóa ghi ulimit.Cassandra, JNA, Docker và CAP_IPC_LOCK

Sau một chút đào xung quanh, có vẻ như hai tùy chọn về cơ bản là ngăn hệ thống hoán đổi JVM, phiên bản hiện đại của Cassandra dường như hoàn thành bằng cách sử dụng JNA.

Thiết --ulimit memlock=-1:-1 trên container Docker của tôi có hiệu quả mà

INFO 12:42:33 JNA mlockall successful 

được in khi khởi động lên, vì vậy tôi cho rằng tôi là tất cả các thiết lập và thực hiện.

Tôi vẫn cần phải --cap-add=CAP_IPC_LOCK và nếu có, làm cách nào để phát hiện xem tôi có đặt chính xác không?

Trả lời

1

Hãy suy nghĩ về điều này.

Trong linux, quá trình cần có khả năng CAP_IPC_LOCK để gọi mlockall.

Bây giờ mlockAll khóa tất cả không gian địa chỉ ảo của quá trình gọi vào RAM, ngăn không cho bộ nhớ đó được phân trang đến vùng trao đổi. Vì vậy, về cơ bản không cho phép bạn trao đổi.

Cài đặt JNA có cùng tác dụng.

Đây là từ Datastax docs

Cài đặt JNA có thể cải thiện trí nhớ Cassandra usage.When cài đặt và cấu hình, Linux không trao đổi trên các JVM, và do đó tránh được vấn đề hiệu suất có liên quan.

http://docs.datastax.com/en/cassandra/1.2/cassandra/install/installJnaDeb.html

Ngoài ra nếu bạn nhìn thấy dưới đây trong các bản ghi

JNA mlockall successful

Điều đó có nghĩa rằng JNA được kích hoạt.

Tôi nghĩ bạn ổn và không cần thêm CAP_IPC_LOCK.