Сколько данных слишком много для кэша Java в куче?Когда я должен начать думать о кеше вне кучи? - PullRequest
6 голосов
/ 20 января 2012

Сколько данных слишком много для кэша в куче, такого как ehcache?

Я получаю 24 ГБ ОЗУ сервера. Я, вероятно, начну с того, что выделю 2-4 ГБ для кеширования, но, возможно, в итоге выделим около 20 ГБ или около того для кэширования. В какой момент я должен беспокоиться, что сборщик мусора для кэша в куче займет слишком много времени?

Кстати, DirectMemory - единственный доступный кэш без кучи с открытым исходным кодом? Готов ли он к прайм-тайм?

Ответы [ 3 ]

3 голосов
/ 20 января 2012

Зависит от вашей JVM и особенно от используемого GC.Более старые GC особенно не были способны обрабатывать действительно большие кучи, но все чаще предпринимались попытки это исправить.

Системы Azul, например, без проблем продает аппаратное обеспечение с сотнями ГБ кучи (т.е. gc-паузы в мсне полминуты) благодаря их специальному GC , так что это не ограничение Java как таковое.Понятия не имею, насколько хорошая точка доступа / IBM достигла со временем все же.Но тогда куча в 24 Гб не так уж и велика - G1, вероятно, должен был бы там все равно работать достаточно хорошо.

2 голосов
/ 20 января 2012

Основная проблема с большим кешем - полное время GC. Чтобы дать вам представление, это может быть 1 секунда на ГБ (это зависит от приложения к приложению). Если у вас кэш-память объемом 20 ГБ, а приложение периодически останавливается на 20 секунд, это приемлемо?

Как поклонник файлов с прямым отображением и отображением в памяти, я склонен думать о том, когда бы я не выкладывал данные из кучи, а просто использовал их для простоты. ;) Файлы с отображением в памяти практически не влияют на полное время GC независимо от размера.

Одним из преимуществ использования файла с отображением в памяти является то, что он может быть намного больше вашей физической памяти и при этом работать достаточно хорошо. Это оставляет ОС определять, какие части должны быть в памяти, а какие должны быть записаны на диск.

Кстати: более быстрый SSD также помогает;) Большие накопители также имеют тенденцию работать быстрее. Проверьте IOP, которые они могут выполнить.

В этом примере я создаю файловую память объемом 8 ТБ, сопоставленную на машине с 16 ГБ. http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html

Обратите внимание, что в примере с файлом размером 80 ГБ он работает лучше, 8 ТБ, скорее всего, будет слишком большим. ;)

2 голосов
/ 20 января 2012

В какой момент я должен беспокоиться о том, что сборщик мусора для кэша в куче займет слишком много времени?

Как долго это долго?

Серьезно, если вызапускается сборщик мусора с "пропускной способностью", и это дает вам слишком длинные паузы, затем вы должны попробовать переключиться на сборщик с низкой паузой;например, CMS или G1.

...