2012-01-20 28 views
6

Có bao nhiêu dữ liệu quá nhiều cho bộ nhớ đệm trên heap như ehcache?Có bao nhiêu dữ liệu quá nhiều cho bộ đệm java trên heap? Khi nào tôi nên bắt đầu nghĩ về bộ đệm ẩn?

Tôi nhận được máy chủ RAM 24 GB. Tôi có thể sẽ bắt đầu dành 2-4 GB cho bộ nhớ đệm nhưng có thể sẽ dành 20GB hoặc hơn để cache. Tại thời điểm nào tôi nên lo lắng rằng GC cho bộ nhớ đệm trên heap sẽ mất quá nhiều thời gian?

Nhân tiện, DirectMemory là bộ đệm ẩn nguồn mở duy nhất có sẵn không? Nó đã sẵn sàng cho thời gian chính?

+0

Câu trả lời cho câu hỏi của bạn phụ thuộc nhiều hơn vào đặc điểm sử dụng bộ nhớ cache so với kích thước bộ nhớ cache. Ví dụ, tỷ lệ đọc/ghi, TTL, kích thước của các đối tượng bạn đang lưu trữ, số lượng đối tượng bạn có thể lưu trữ. Ngoài ra, câu hỏi của bạn là đặt một câu hỏi khá mờ. Bạn sẽ xem xét "quá lâu?" hoặc "Sẵn sàng cho thời gian chính?" Bạn phải biết loại SLA nào bạn cần trước khi bạn thực sự có thể đánh giá bất kỳ giải pháp lưu trữ bộ nhớ đệm nào. Thời gian phản hồi tối đa trong ms và SLA đạt tỷ lệ phần trăm. – allingeek

Trả lời

3

Phụ thuộc vào JVM của bạn và đặc biệt là GC được sử dụng. Các GC cũ hơn đặc biệt không thực sự có khả năng xử lý đống lớn thực sự, nhưng đã có một nỗ lực gia tăng để sửa lỗi đó. Ví dụ:

Hệ thống Azul bán phần cứng với hàng trăm GB không có vấn đề (ví dụ: gc tạm dừng trong ms không phải là nửa phút) nhờ vào số special GC của chúng tôi, vì vậy không giới hạn Java. Không có ý tưởng làm thế nào tốt hotspot/IBM đã có theo thời gian mặc dù. Nhưng sau đó một heap 24gb không phải là dù sao lớn - G1 có lẽ nên làm một công việc đủ tốt dù sao đi nữa.

2

Tại thời điểm nào tôi nên lo lắng rằng GC cho bộ nhớ cache trên bộ nhớ cache sẽ mất quá nhiều thời gian?

Thời lượng quá dài?

Nghiêm túc, nếu bạn đang chạy bộ thu gom rác "thông qua" và điều này cho bạn tạm dừng quá dài, thì bạn nên thử chuyển sang bộ thu tạm dừng thấp; ví dụ. CMS hoặc G1.

2

Vấn đề chính với bộ nhớ cache lớn là thời gian GC đầy đủ. Để cung cấp cho bạn một ý tưởng nó có thể là 1 giây cho mỗi GB (Điều này thay đổi từ ứng dụng đến ứng dụng) Nếu bạn có một bộ nhớ cache 20 GB và ứng dụng của bạn tạm dừng trong 20 giây, thường xuyên như vậy là chấp nhận được?

Là một fan hâm mộ của các tập tin ánh xạ trực tiếp và bộ nhớ tôi có xu hướng suy nghĩ về khi nào tôi không phải cả hai để đưa dữ liệu ra heap, và chỉ sử dụng heap cho đơn giản. ;) Các tệp được ánh xạ bộ nhớ không có ảnh hưởng đến thời gian GC đầy đủ bất kể kích thước.

Một trong những ưu điểm của việc sử dụng tệp ánh xạ bộ nhớ là nó có thể lớn hơn nhiều so với bộ nhớ vật lý của bạn và vẫn hoạt động khá tốt. Điều này rời khỏi hệ điều hành để xác định phần nào cần phải có trong bộ nhớ và những gì cần phải được flushed vào đĩa.

BTW: Có ổ SSD nhanh hơn cũng hữu ích;) Các ổ đĩa lớn hơn cũng có xu hướng nhanh hơn. Kiểm tra các IOP mà họ có thể thực hiện.

Trong ví dụ này, tôi tạo bộ nhớ tệp 8 TB được ánh xạ trên máy có 16 GB. http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html

Lưu ý, nó hoạt động tốt hơn trong ví dụ tệp 80 GB, 8 TB có khả năng bị xóa quá mức. ;)

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