Câu hỏi của tôi liên quan đến mức độ ứng dụng JVM có thể khai thác bố cục NUMA của máy chủ.NUMA nhận thức về JVM
Tôi có một ứng dụng Akka trong đó các tác nhân đồng thời xử lý các yêu cầu bằng cách kết hợp dữ liệu đến với dữ liệu 'phổ biến' đã được nạp vào một đối tượng bất biến (Scala). Ứng dụng mở rộng tốt trên đám mây, sử dụng nhiều máy ảo lõi kép, nhưng hoạt động kém trên một máy tính 64 lõi đơn. Tôi đoán điều này là vì đối tượng dữ liệu chung nằm trong một ô NUMA và nhiều luồng đồng thời truy cập từ các ô khác là quá nhiều cho các kết nối.
Nếu tôi chạy 64 ứng dụng JVM riêng biệt, mỗi ứng dụng chứa 1 tác nhân thì hiệu suất lại tốt. Một phương pháp tiếp cận vừa phải có thể là chạy nhiều ứng dụng JVM vì có NUMA ô (8 trong trường hợp của tôi), cho hệ điều hành máy chủ có cơ hội giữ các luồng và bộ nhớ với nhau?
Nhưng có cách nào thông minh hơn để đạt được hiệu ứng tương tự trong một JVM đơn lẻ không? Ví dụ. nếu tôi thay thế đối tượng dữ liệu chung của mình bằng một vài trường hợp của một kiểu chữ, JVM có khả năng đặt chúng trên ô NUMA tối ưu không?
Cập nhật:
Tôi đang sử dụng Oracle JDK 1.7.0_05, và Akka 2.1.4
bây giờ tôi đã thử với các tùy chọn UseNUMA và UseParallelGC JVM. Dường như không có bất kỳ tác động đáng kể nào đến hiệu suất chậm khi sử dụng một hoặc một vài JVM. Tôi cũng đã thử sử dụng một PinnedDispatcher và thre-pool-executor không có hiệu lực. Tôi không chắc chắn nếu cấu hình có hiệu lực mặc dù, vì có vẻ như không có gì khác nhau trong các bản ghi khởi động.
Cải tiến lớn nhất vẫn còn khi tôi sử dụng một JVM đơn cho mỗi công nhân (~ 50). Tuy nhiên, vấn đề với điều này dường như là có một sự chậm trễ dài (lên đến một vài phút) trước khi FailureDector đăng ký trao đổi thành công 'nhịp tim đầu tiên' giữa các JVM của Akka cluster. Tôi nghi ngờ có một số vấn đề khác ở đây mà tôi chưa phát hiện ra. Tôi đã có để tăng ulimit -u kể từ khi tôi đã nhấn số lượng tối đa mặc định của các quy trình (1024).
Chỉ cần làm rõ, tôi không cố gắng đạt được số lượng lớn thư, chỉ cần cố gắng có nhiều diễn viên riêng đồng thời truy cập một đối tượng bất biến.
Bạn có đang sử dụng tùy chọn -XX: + UseNUMA jvm không? – cmbaxter
Ngoài ra, bạn sử dụng cài đặt GC nào? Và những gì thực thi cấu hình? –
Bạn có thể cần phải nói với akka để sử dụng các mẫu luồng tốt hơn, xem tại đây cho một số tùy chọn cấu hình hộp thư: http://doc.akka.io/docs/akka/snapshot/scala/dispatchers.html – Noah