Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Out of memory errror - есть ли возможность Свопа ?  [new]
razliv
Member

Откуда:
Сообщений: 1067
Здравствуйте, столкнулся с проблемой:


Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded


При заполнении HashMap, большим значением элементов.
Есть ли возможность свопа на диск, или другого способа экономичной работы с большим
количеством данных ?
30 янв 19, 10:24    [21797503]     Ответить | Цитировать Сообщить модератору
 Re: Out of memory errror - есть ли возможность Свопа ?  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3016
razliv,

http://www.mapdb.org/
30 янв 19, 11:20    [21797575]     Ответить | Цитировать Сообщить модератору
 Re: Out of memory errror - есть ли возможность Свопа ?  [new]
mayton
Member

Откуда: loopback
Сообщений: 38770
Есть достаточно быстрые коробочные продукты с интерфейсом похожим на Map<> которые создавались в Google и Facebook.
И изначально проектировались для очень большого хранилища. Щас доступны к юзанию.

Смотрите.

https://github.com/facebook/rocksdb/tree/master/java/src/main/java/org/rocksdb
https://github.com/google/leveldb

Будьте внимательны. Раньше их реализация была написаны на С++ и на Java был вынесен интерфейс.
Как щас я не знаю. Возможно что-то было полносью портировано. Не следил за новостями.
30 янв 19, 11:40    [21797596]     Ответить | Цитировать Сообщить модератору
 Re: Out of memory errror - есть ли возможность Свопа ?  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 4785
razliv, начать бы конечно с того, что выделить чуть больше памяти? -xmx, -xms
30 янв 19, 11:56    [21797610]     Ответить | Цитировать Сообщить модератору
 Re: Out of memory errror - есть ли возможность Свопа ?  [new]
razliv
Member

Откуда:
Сообщений: 1067
Спасибо большое за ответы !

Озверин,

Тут уже увеличением памяти не поможешь :(

Спасибо буду пробовать гибриды collections и db :) именно то что и хотелось !
30 янв 19, 14:02    [21797767]     Ответить | Цитировать Сообщить модератору
 Re: Out of memory errror - есть ли возможность Свопа ?  [new]
mayton
Member

Откуда: loopback
Сообщений: 38770
Оптимизированы-ли они по записи? Если чел туда будет заливать терабайты информации - это будет
тоже немаловажно. Ждать ему минуту. Час. Или сутки. Хорошая тема для бенчмарка.
30 янв 19, 14:14    [21797783]     Ответить | Цитировать Сообщить модератору
 Re: Out of memory errror - есть ли возможность Свопа ?  [new]
razliv
Member

Откуда:
Сообщений: 1067
Майтон

А что есть "оптимизированны по записи" ?
30 янв 19, 15:53    [21797963]     Ответить | Цитировать Сообщить модератору
 Re: Out of memory errror - есть ли возможность Свопа ?  [new]
mayton
Member

Откуда: loopback
Сообщений: 38770
Для дисковых операций random-access губителен. Поэтому те структуры данных
которые планируется хранить на диске и модифицировать часто и много - дополняют
логом транзакций. Это было очень актуально в этоху магнитных дисков. Для SSD - не знаю.
Недо тестировать. Но сам по себе факт наличия подобной структуры говорит просто о зрелости
проекта. Незрелые проекты обычно надеются что random-access "прокатит".
30 янв 19, 16:10    [21797985]     Ответить | Цитировать Сообщить модератору
 Re: Out of memory errror - есть ли возможность Свопа ?  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3016
mayton
Для дисковых операций random-access губителен. Поэтому те структуры данных
которые планируется хранить на диске и модифицировать часто и много - дополняют
логом транзакций.
Все уснуть не могу - пытаюсь понять как связано первое предложение со вторым:
  • В жаве условно есть три варианта что-то читать и писать (в порядке уменьшения тормознутости): старые добрые I/OStreams, RandomAccessFile и MappedByteBuffer
  • лог транзакций (он же журнал) нужен чтобы поддержать atomicity и durability - и тут вообще пофиг как доступ к файлу организован

    а кого random-access-то губит, как и зачем?
  • 30 янв 19, 20:34    [21798263]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    Андрей Панфилов,

    давайте рассуждать. Автору нужен HashMap. На диске. HashMap в основе своей природы несет
    функционал произвольного доступа к бакету. Поскольку речь идет о том что часть данных будет
    лежать на диске - мы должны придумать как обеспечить максимальную пропускную способность диска.

    Java предлагает два базовых функционала. RandomAccessFile и FileOutputStream. Оба из них
    уже оптимизированы через NIO по максимуму поэтому мы будем счиать что NIO нам не нужен.
    Первый пригоден для чтений записей рандомно. В любое место диска. Второй - только последовательно.
    Первый создает жёсткую нагрузку на кеши и на механику диска. Второй - более мягкий.
    Суммарная пропускная способность random-access file будет зависеть от порядка чтения.
    А порядок у нас - произвольный (вспоминаем hashCode()). По чтению и по записи будет
    примерно одинаково плохо. И чем крупнее будет база - тем сильнее тормоза. Но чтобы
    мы почувствовали этот эффект - надо хотя-бы 2-4 раза превысить доступный объем памяти
    чтобы убрать эффекты кешей ОС которые нам любезно подсовывает операционка.
    Поэтому я говорил о терабайтах. На мегабайтах разницы особой не будет.

    Суммарная пропускная способность FileOutputStream (последовательный доступ) будет
    максимально быстрой для вашего диска. К паспортной скорости HDD не приблизится но
    в силу архитектуры будет достаточно быстрой что программисту там уже нечего оптимизировать.
    Скорость - as is.

    Можно провести эксперимент - читать терабайтный файл последовательно.
    А потом тот-же файл блоками (по 1,2,4,16 Mb) как хотите произвольно и замерять как просядет скорость.

    На этом свойстве основанны журналирующие оптимизации практически всех DBMS.
    DBMS фактически "откладывает на потом" запись в сегмент данных. Сначала она журналирует
    (FileOutputStream) а потом уже в фоне дописывает в данные когда есть возможность.
    Но главное - не блокировать ожидание записи.

    Та дисковая DBMS которая не использует эту возможность - либо плоха. Либо предназначена
    только для работы in-memory.

    Про MappedByteBuffer я сейчас не готов говорить. Это - сложная тема и она перекликается с реализацией
    этой техники в ОС. Я кстати поднимал новогодний топик на эту тему. Где то есть.
    30 янв 19, 20:50    [21798271]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Андрей Панфилов
    Member

    Откуда: Москва > Melbourne
    Сообщений: 3016
    mayton
    Java предлагает два базовых функционала. RandomAccessFile и FileOutputStream. Оба из них
    уже оптимизированы через NIO по максимуму поэтому мы будем счиать что NIO нам не нужен.
    Первый пригоден для чтений записей рандомно. В любое место диска. Второй - только последовательно.
    Первый создает жёсткую нагрузку на кеши и на механику диска. Второй - более мягкий.
    Это как вообще? Вот смотрим сигнатуру:

        /**
         * Writes <code>len</code> bytes from the specified byte array
         * starting at offset <code>off</code> to this file output stream.
         *
         * @param      b     the data.
         * @param      off   the start offset in the data.
         * @param      len   the number of bytes to write.
         * @exception  IOException  if an I/O error occurs.
         */
        public void write(byte b[], int off, int len) throws IOException {
            writeBytes(b, off, len, append);
        }
    
    Наличие offset в параметрах метода какбы намекает, что через FileOutputStream мы можем писать в "любой" (его зачем-то int объявили, а в RandomAccessFile seek принимает long, но не суть потому что есть getChannel().position()) участок файла - это и есть же произвольный доступ, разве нет? С точки зрения операционной системы между FileOutputStream и RandomAccessFile только в том, что RandomAccessFile можно открыть с O_SYNC или O_DSYNC, а так оба этих жавских API утилизируют одни и те же системные вызовы open/seek/write/close - разница по большому счету только в API со стороны жавы.

    mayton
    Можно провести эксперимент - читать терабайтный файл последовательно.
    А потом тот-же файл блоками (по 1,2,4,16 Mb) как хотите произвольно и замерять как просядет скорость.
    Вы-таки определитесь, пишите вы или читаете.

    mayton
    На этом свойстве основанны журналирующие оптимизации практически всех DBMS.
    DBMS фактически "откладывает на потом" запись в сегмент данных. Сначала она журналирует
    (FileOutputStream) а потом уже в фоне дописывает в данные когда есть возможность.
    Но главное - не блокировать ожидание записи.
    Журнал в БД обеспечивает atomicity и durability, к производительности это никакого отношения не имеет, откуда по-вашему возьмется производительность, если с журналом нужно уже в два места писать, а запись в журнал "последовательная" (да еще и с O_SYNC) не потому что так быстрее, а потому что чтобы данные не потерять.
    31 янв 19, 04:59    [21798379]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    вадя
    Member

    Откуда: Екатеринбург
    Сообщений: 15192
    razliv
    При заполнении HashMap, большим значением элементов.
    Есть ли возможность свопа на диск, или другого способа экономичной работы с большим
    интересно а перенос HashMap в субд не поможет?
    31 янв 19, 06:43    [21798393]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Siemargl
    Member

    Откуда: 010100
    Сообщений: 6036
    Андрей Панфилов
    .....
    Но главное - не блокировать ожидание записи.
    Журнал в БД обеспечивает atomicity и durability, к производительности это никакого отношения не имеет, откуда по-вашему возьмется производительность, если с журналом нужно уже в два места писать, а запись в журнал "последовательная" (да еще и с O_SYNC) не потому что так быстрее, а потому что чтобы данные не потерять.[/quot]
    Надо это производителям почти всех СУБД рассказать, а то они не знают =)


    Топик - бери любую удобную key-value dbms
    31 янв 19, 09:39    [21798460]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    Андрей Панфилов
        /**
         * Writes <code>len</code> bytes from the specified byte array
         * starting at offset <code>off</code> to this file output stream.
         *
         * @param      b     the data.
         * @param      off   the start offset in the data.
         * @param      len   the number of bytes to write.
         * @exception  IOException  if an I/O error occurs.
         */
        public void write(byte b[], int off, int len) throws IOException {
            writeBytes(b, off, len, append);
        }
    
    Наличие offset в параметрах метода какбы намекает, что через FileOutputStream мы можем писать в "любой" (его зачем-то int объявили, а в RandomAccessFile seek принимает long, но не суть потому что есть getChannel().position()) участок файла - это и есть же произвольный доступ, разве нет? С точки зрения операционной системы между FileOutputStream и RandomAccessFile только в том, что RandomAccessFile можно открыть с O_SYNC или O_DSYNC, а так оба этих жавских API утилизируют одни и те же системные вызовы open/seek/write/close - разница по большому счету только в API со стороны жавы.

    Здесь offset - применительно не к файлу а к источнику. К массиву байтов.

    По поводу API операционной системы - вы правы. Почти все файловые API в конечно счете
    будут сводится к open/fseek/read/write/close для Unix и к другим CreateFile.. (там более длинное
    название в Windows). И на уровне железа будут отображаться в атомарные операции
    записи сектора на диск для HDD или для какой-то примитивной операции передачи данных блочно
    для SSD.
    31 янв 19, 10:52    [21798517]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    Андрей Панфилов
    mayton
    Можно провести эксперимент - читать терабайтный файл последовательно.
    А потом тот-же файл блоками (по 1,2,4,16 Mb) как хотите произвольно и замерять как просядет скорость.
    Вы-таки определитесь, пишите вы или читаете.

    В самом начале топика я выразил сомнение по поводу скорости инициализации подобной дисковой мапы.
    Инициализация предполагает запись.

    Про эксперимент - пока отложим.
    31 янв 19, 10:54    [21798518]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    Андрей Панфилов
    Журнал в БД обеспечивает atomicity и durability, к производительности это никакого отношения не имеет, откуда по-вашему возьмется производительность, если с журналом нужно уже в два места писать, а запись в журнал "последовательная" (да еще и с O_SYNC) не потому что так быстрее, а потому что чтобы данные не потерять.

    Я говорил о физическом уровне. Об оптимзиации дисковых операций в DBMS.

    Вы (очень резко) прыгнули в ACID (atomicity, durability) про которые мы еще не говорили. Да и автор пока не выставлял
    требований. Хотя журнал (redo-log, write-ahead-log) может быть использован для обеспечения durability. Да.

    Я сейчас не помню как там в этих key-value хранилищах. Но обычно владелец волен выбирать режим в котором
    он будет работать. Транзакционный или не транзакционный.

    А для многих операций уровня ETL, bulk-load и прочих (массовых) манипуляций с данными обычно разработчик
    или DBA сознательно выбирает не-транзакционный режим. Например стартует биржевая система. Она должна
    в несколько минут прогрузить данные из обычной БД в свой более быстрый key-value. Я-бы здесь сознательно
    выбирал отключение транзакций ибо нету еще никаких пользователей (система в процессе загрузки) и сама
    по себе операция достаточно проста по реакции на ошибку. Если что-то пошло не так - просто загрузим еще разик.
    Нам важнее быстро стартовать операционный день. А после старта уже пул коннекшенов подключится в режиме
    транзакций как и положено.
    31 янв 19, 11:05    [21798529]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Озверин
    Member

    Откуда: Ростов-на-Дону
    Сообщений: 4785
    Андрей Панфилов, наличие оффсета как бе намекает, откуда из массива переданных байт начинать писать, а не "куда".
    31 янв 19, 11:08    [21798532]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Андрей Панфилов
    Member

    Откуда: Москва > Melbourne
    Сообщений: 3016
    mayton
    Здесь offset - применительно не к файлу а к источнику. К массиву байтов.
    Тогда понятно чего там int, тем не менее fos.getChannel().position() будет делать seek().

    mayton
    По поводу API операционной системы - вы правы. Почти все файловые API в конечно счете
    будут сводится к open/fseek/read/write/close для Unix и к другим CreateFile.. (там более длинное
    название в Windows). И на уровне железа будут отображаться в атомарные операции
    записи сектора на диск для HDD или для какой-то примитивной операции передачи данных блочно
    для SSD.
    Там еще есть DMA, оно же zero-copy и пр. MappedByteBuffer в жаве именно его реализует.
    31 янв 19, 11:22    [21798541]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Озверин
    Member

    Откуда: Ростов-на-Дону
    Сообщений: 4785
    Андрей Панфилов, что там реализовано в java - вообще никого не волнует, если SSD физически при записи работает с блоками по 1mb(или по сколько там?). И каждая рандомная запись блока размером меньшим 1 mb будет сопровождаться определенным кол-вом IOPs:

    -прочесть весь блок из 1 метра
    -заменить в нем на наш маленький блок
    -записать обратно

    Отсюда проистекает так называемая оптимизация под железо, когда пишут сразу "нужным" размером блока", а не маленькими или большими, про то (частично) майтон и говорит.
    31 янв 19, 11:30    [21798556]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    Андрей Панфилов
    Там еще есть DMA, оно же zero-copy и пр. MappedByteBuffer в жаве именно его реализует.

    Аккурат в новый год у меня была попытка выпрыгнуть из Java условностей и прыгнуть
    в недра ОС (в основном меня интересовали Windows-10 и Linux последних версий ядра)
    чтобы понять что там и как. К сожалению сообщество отреагировало вяло. Толи
    салат Оливье был плох толи Шампанськое...

    Вот он кстати https://www.sql.ru/forum/1307294/tyapnichnyy-novogodniy-mmap
    31 янв 19, 11:44    [21798575]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Leonid Kudryavtsev
    Member

    Откуда:
    Сообщений: 7387
    Года три назад, у LevelDB драйвера для жава были какие-то ну очень кривые. Да и по тестам, отзывам, нишевой продукт с массой специфики

    Когда для себя выбирал, остановился на банальном SQL Lite, лично мне скорости вполне хватило. По тестам в И-нет (сам не тестил) особого профита у LevelDb не видно, а проблемы на форуме часто описывают. Ну нафиг такие эксперементы )))
    31 янв 19, 11:53    [21798585]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    вадя
    Member

    Откуда: Екатеринбург
    Сообщений: 15192
    Озверин
    -прочесть весь блок из 1 метра
    -заменить в нем на наш маленький блок
    -записать обратно
    а не делает ли это всё update из любой субд?
    31 янв 19, 11:53    [21798586]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    вадя
    razliv
    При заполнении HashMap, большим значением элементов.
    Есть ли возможность свопа на диск, или другого способа экономичной работы с большим
    интересно а перенос HashMap в субд не поможет?

    Надо спросить у автора. Мысль здравая.
    31 янв 19, 11:56    [21798591]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Андрей Панфилов
    Member

    Откуда: Москва > Melbourne
    Сообщений: 3016
    Озверин
    Отсюда проистекает так называемая оптимизация под железо, когда пишут сразу "нужным" размером блока", а не маленькими или большими, про то (частично) майтон и говорит.
    Оно возникает только если запись идет мимо кеша ФС, т.е. файлы нужно открывать с O_DIRECT и дальше приседать, что, к примеру, в Linux не рекомендуется делать.
    31 янв 19, 12:08    [21798608]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    Я-бы очень не хотел обсуждать тему кеша ОС. Она очень путает карты. Особенно когда хранилище
    превысило память на 10-100% а мы ради этого уже втащили в постановку key-value БД.

    У нас нет чистой алгоритмизации а есть эвристика на тему что попадет
    в кеш и что вобще автор будет делать с базой в части статистики.

    Я беру самый самый worst case. Когда размер БД в несколько раз уже превысил доступную
    память и соотв все кеши бесполезны.

    Рассматривать этот диапазон 10-100% я не хочу. Мне это просто неинтересно.
    31 янв 19, 12:40    [21798665]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    Вобщем если речь идет о 10-100% оверхеда по памяти - то лучше просто купить память на сервак и растянуть Xmx
    по максимуму насколько это возможно.

    Если OutOfMemory будет регулярным и есть тенденция что база вырастет очень резко - тогда надо действительно
    key-value хранилище. Решать автору вобщем-то.
    31 янв 19, 12:53    [21798692]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    just_vladimir
    Member

    Откуда:
    Сообщений: 868
    Да вроде варианты очевидны:
    1. ОЗУ на сервере не хватает и нет супер жестких требований по производительности - РСУБД
    2. ОЗУ на сервере не хватает, но производителность РСУБД не устраивает - подбираем базу под свои экзотические потребности, смотрим всякие Key-value, NoSQL и маскирующиеся под РСУБД, но модные внутри (а-ля тарантул)
    3. Ограничений по ОЗУ нет, требований по персистенсу нет, производительности модных СУБД не хватает, а просто приложению сложно ворочать много объектов в хипе - берем либу для off-heap cache
    4. Ограничений по ОЗУ нет, но нужен персистенс и супер производительность - берем IMDG решение
    31 янв 19, 14:18    [21798797]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Leonid Kudryavtsev
    Member

    Откуда:
    Сообщений: 7387
    just_vladimir
    ....
    3. Ограничений по ОЗУ нет, требований по персистенсу нет, производительности модных СУБД не хватает, а просто приложению сложно ворочать много объектов в хипе - берем либу для off-heap cache
    ....

    При этом аккуратно смотрем, кто из студентов делал эту мега-либу. Если есть фотка и девочка-студент грудастая - можно за ней либу потестить.
    Если фотки нет, то оно Вам надо, за студентами их студенческие поделки тестить?

    Не видел ни одной нормальной либы для off-heap. Нормальные (более-менее) есть, но они все для специфических задачь. Если value для Map'а могут быть разного размера, то удаление данных из off-heap, уже не тревиальная задача (фрагментация). Насколько стоит замусоривать память операционной системы и что этим при активной работе в режиме 24x7 можно достигнуть, лично мне не очень понятно. Но я бы на реальных PROD серверах эксперементировал бы с опаской.

    IMHO & AFAIK

    Если такое тащить в проект, то только понимая, что притащенный copy-past'ом из I-net'а код самому же придется и поддерживать. А тогда, проще уж свою либу написать (методом Copy-Past'а) заточенную под свои данные и паттерн нагрузки.
    31 янв 19, 15:08    [21798863]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    Еще ... глубоко не вникая в детали. Я-бы установил Eclipse Memory Analyzer.
    И посмотрел-бы что вообще лежит в этой хеш-мапе. Если там к примеру
    есть дубликаты строк - то можно поиграть в справочники. Или заменить
    толстые типы данных (Date) на атомарные (long) если бизнес-логика позволяет.
    Булевы - слить пакетом в одно целое (по аналогии с С++ bitfields).

    Вобщем до того как покупать память и ставить СУБД просто проанализировать
    top 10 memory consumers. Вангую что там будет char[] но что внутри надо поисследовать.
    31 янв 19, 15:50    [21798917]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Озверин
    Member

    Откуда: Ростов-на-Дону
    Сообщений: 4785
    mayton
    Вангую что там будет char[].


    Шерлок, но как?
    31 янв 19, 15:51    [21798920]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    Озверин
    mayton
    Вангую что там будет char[].


    Шерлок, но как?

    А он везде...
    31 янв 19, 15:56    [21798924]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Leonid Kudryavtsev
    Member

    Откуда:
    Сообщений: 7387
    mayton
    А он везде...

    +++

    :-)
    31 янв 19, 16:15    [21798937]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    just_vladimir
    Member

    Откуда:
    Сообщений: 868
    Leonid Kudryavtsev
    just_vladimir
    ....
    3. Ограничений по ОЗУ нет, требований по персистенсу нет, производительности модных СУБД не хватает, а просто приложению сложно ворочать много объектов в хипе - берем либу для off-heap cache
    ....

    При этом аккуратно смотрем, кто из студентов делал эту мега-либу. Если есть фотка и девочка-студент грудастая - можно за ней либу потестить.
    Если фотки нет, то оно Вам надо, за студентами их студенческие поделки тестить?

    Не видел ни одной нормальной либы для off-heap. Нормальные (более-менее) есть, но они все для специфических задачь. Если value для Map'а могут быть разного размера, то удаление данных из off-heap, уже не тревиальная задача (фрагментация). Насколько стоит замусоривать память операционной системы и что этим при активной работе в режиме 24x7 можно достигнуть, лично мне не очень понятно. Но я бы на реальных PROD серверах эксперементировал бы с опаской.

    IMHO & AFAIK

    Если такое тащить в проект, то только понимая, что притащенный copy-past'ом из I-net'а код самому же придется и поддерживать. А тогда, проще уж свою либу написать (методом Copy-Past'а) заточенную под свои данные и паттерн нагрузки.

    Ну вот, например, вроде Паньгин не тянет на грудастую девочку студентку, но думаю, что если прижмет и задача будет требовать off heap кэша, то его либой можно уж и воспользоваться https://github.com/odnoklassniki/one-nio, но да, понятно, что на свой страх и риск, но если надо, то что уж делать.
    31 янв 19, 16:31    [21798954]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Leonid Kudryavtsev
    Member

    Откуда:
    Сообщений: 7387
    Leonid Kudryavtsev
    ...Нормальные (более-менее) есть, но они все для специфических задачь....


    https://github.com/odnoklassniki/one-nio,

    Дело же не в либе, а что бы ей еще и правильно пользоваться и по назначению.

    Например глянул на класс allocator. Если, не дай бог, выделять маленькими блоками, то смысла никакого. Т.к. при allocate создается еще и служебные объекты в Heap'е. Т.ч. данные запихиваемые в OffHeap нужно как-то объединять в достаточно большие блоки. Что, для произвольных данных, уже не очень тревиально.

    LongLongHashMap все хранит в OffHeap:
    1) AFAIK а разница в скорости доступа heap vs off heap, как бы не маленькая (должно быть разы, вплодь до порядков. Но не тестил!).
    2) Маппа хранится одним куском. Что для ОЧЕНЬ большой маппы, плохо. Т.к. фрагментацию памяти в ОС никто не отменял. (на данном форуме был топик в подфоруме Delphi, что free памяти навалом, а массив не выделяется)

    LongObjectHashMap values вроде хранить в обычном heap'е. Экономить на keys (с учетом потери скорости на offheap) смысла вообще не вижу.

    Это с ходу. Могу ошибаться.
    31 янв 19, 16:53    [21798989]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    just_vladimir
    Member

    Откуда:
    Сообщений: 868
    Leonid Kudryavtsev
    Leonid Kudryavtsev
    ...Нормальные (более-менее) есть, но они все для специфических задачь....


    https://github.com/odnoklassniki/one-nio,

    Дело же не в либе, а что бы ей еще и правильно пользоваться и по назначению.

    Например глянул на класс allocator. Если, не дай бог, выделять маленькими блоками, то смысла никакого. Т.к. при allocate создается еще и служебные объекты в Heap'е. Т.ч. данные запихиваемые в OffHeap нужно как-то объединять в достаточно большие блоки. Что, для произвольных данных, уже не очень тревиально.

    LongLongHashMap все хранит в OffHeap:
    1) AFAIK а разница в скорости доступа heap vs off heap, как бы не маленькая (должно быть разы, вплодь до порядков. Но не тестил!).
    2) Маппа хранится одним куском. Что для ОЧЕНЬ большой маппы, плохо. Т.к. фрагментацию памяти в ОС никто не отменял. (на данном форуме был топик в подфоруме Delphi, что free памяти навалом, а массив не выделяется)

    LongObjectHashMap values вроде хранить в обычном heap'е. Экономить на keys (с учетом потери скорости на offheap) смысла вообще не вижу.

    Это с ходу. Могу ошибаться.

    На всякий случай уточню, что мы ведь оба понимаем, что если вдруг дело дошло до того, что мы стали задумываться об off heap кэшах, то у нас уже проект не совсем уж на коленке деланный и в команде не 1.5 студента, так ведь?
    31 янв 19, 17:01    [21798996]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    Leonid Kudryavtsev
    Member

    Откуда:
    Сообщений: 7387
    Если взять исходный вопрос ТС, то сколько человек делает проект - не важно. Все равно получится:

    +

    Картинка с другого сайта.
    31 янв 19, 17:05    [21799000]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    Leonid Kudryavtsev
    Leonid Kudryavtsev
    ...Нормальные (более-менее) есть, но они все для специфических задачь....

    LongLongHashMap все хранит в OffHeap:
    1) AFAIK а разница в скорости доступа heap vs off heap, как бы не маленькая (должно быть разы, вплодь до порядков. Но не тестил!).
    2) Маппа хранится одним куском. Что для ОЧЕНЬ большой маппы, плохо. Т.к. фрагментацию памяти в ОС никто не отменял. (на данном форуме был топик в подфоруме Delphi, что free памяти навалом, а массив не выделяется)

    LongObjectHashMap values вроде хранить в обычном heap'е. Экономить на keys (с учетом потери скорости на offheap) смысла вообще не вижу.

    А какую задачу решает LongLongHashMap? Там по API - непонятно. Нет внятного description.
    Если индексы больше 2 Гига то это точно оно. Ибо декларировано. А насчет другого... ну лучшее враг
    хорошего.
    31 янв 19, 17:44    [21799043]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 38770
    Еще пару названий вспомнил.

    https://hazelcast.com/ - возможно есть коммерческая ветка. Где возможностей больше. Надо проверять.

    https://github.com/dain/leveldb - порт сишного LevelDB на Java. Лично я не юзал. Я какраз брал его С++ ную часть в составе Infinispan.
    Внизу документации пишут что юзается в ActiveMQ

    https://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html - Беркли. Это старый проверенный
    конь который работает в Линуксах уже давно. Кажется в DNS используется. Опенсорцные разработки Оракла
    замерли на какой-то версии. Кажется новых нет.
    31 янв 19, 18:30    [21799084]     Ответить | Цитировать Сообщить модератору
     Re: Out of memory errror - есть ли возможность Свопа ?  [new]
    razliv
    Member

    Откуда:
    Сообщений: 1067
    Спасибо большое, никогда раньше не работал с такими вещами - раньше стандартных Явовских
    коллекций вполне хватало. Но теперь открыл для себя новую область :)

    MapDB хватило для моих нужд, фурычит :)
    1 фев 19, 09:32    [21799320]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: 1 2      [все]
    Все форумы / Java Ответить