powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Out of memory errror - есть ли возможность Свопа ?
25 сообщений из 39, страница 1 из 2
Out of memory errror - есть ли возможность Свопа ?
    #39766882
razliv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, столкнулся с проблемой:


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


При заполнении HashMap, большим значением элементов.
Есть ли возможность свопа на диск, или другого способа экономичной работы с большим
количеством данных ?
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39766918
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39766931
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть достаточно быстрые коробочные продукты с интерфейсом похожим на Map<> которые создавались в Google и Facebook.
И изначально проектировались для очень большого хранилища. Щас доступны к юзанию.

Смотрите.

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

Будьте внимательны. Раньше их реализация была написаны на С++ и на Java был вынесен интерфейс.
Как щас я не знаю. Возможно что-то было полносью портировано. Не следил за новостями.
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39766941
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
razliv, начать бы конечно с того, что выделить чуть больше памяти? -xmx, -xms
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767020
razliv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое за ответы !

Озверин,

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

Спасибо буду пробовать гибриды collections и db :) именно то что и хотелось !
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767028
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимизированы-ли они по записи? Если чел туда будет заливать терабайты информации - это будет
тоже немаловажно. Ждать ему минуту. Час. Или сутки. Хорошая тема для бенчмарка.
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767153
razliv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Майтон

А что есть "оптимизированны по записи" ?
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767172
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для дисковых операций random-access губителен. Поэтому те структуры данных
которые планируется хранить на диске и модифицировать часто и много - дополняют
логом транзакций. Это было очень актуально в этоху магнитных дисков. Для SSD - не знаю.
Недо тестировать. Но сам по себе факт наличия подобной структуры говорит просто о зрелости
проекта. Незрелые проекты обычно надеются что random-access "прокатит".
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767305
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДля дисковых операций random-access губителен. Поэтому те структуры данных
которые планируется хранить на диске и модифицировать часто и много - дополняют
логом транзакций.Все уснуть не могу - пытаюсь понять как связано первое предложение со вторым:
В жаве условно есть три варианта что-то читать и писать (в порядке уменьшения тормознутости): старые добрые I/OStreams, RandomAccessFile и MappedByteBuffer

лог транзакций (он же журнал) нужен чтобы поддержать atomicity и durability - и тут вообще пофиг как доступ к файлу организован

а кого random-access-то губит, как и зачем?
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767310
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

давайте рассуждать. Автору нужен 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 я сейчас не готов говорить. Это - сложная тема и она перекликается с реализацией
этой техники в ОС. Я кстати поднимал новогодний топик на эту тему. Где то есть.
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767358
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonJava предлагает два базовых функционала. RandomAccessFile и FileOutputStream. Оба из них
уже оптимизированы через NIO по максимуму поэтому мы будем счиать что NIO нам не нужен.
Первый пригоден для чтений записей рандомно. В любое место диска. Второй - только последовательно .
Первый создает жёсткую нагрузку на кеши и на механику диска. Второй - более мягкий.Это как вообще? Вот смотрим сигнатуру:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    /**
     * 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) не потому что так быстрее, а потому что чтобы данные не потерять.
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767367
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
razlivПри заполнении HashMap, большим значением элементов.
Есть ли возможность свопа на диск, или другого способа экономичной работы с большиминтересно а перенос HashMap в субд не поможет?
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767405
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов.....
Но главное - не блокировать ожидание записи.Журнал в БД обеспечивает atomicity и durability, к производительности это никакого отношения не имеет, откуда по-вашему возьмется производительность, если с журналом нужно уже в два места писать, а запись в журнал "последовательная" (да еще и с O_SYNC) не потому что так быстрее, а потому что чтобы данные не потерять.[/quot]
Надо это производителям почти всех СУБД рассказать, а то они не знают =)


Топик - бери любую удобную key-value dbms
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767437
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    /**
     * 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.
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767438
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловmaytonМожно провести эксперимент - читать терабайтный файл последовательно.
А потом тот-же файл блоками (по 1,2,4,16 Mb) как хотите произвольно и замерять как просядет скорость.
Вы-таки определитесь, пишите вы или читаете.

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

Про эксперимент - пока отложим.
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767445
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловЖурнал в БД обеспечивает atomicity и durability, к производительности это никакого отношения не имеет, откуда по-вашему возьмется производительность, если с журналом нужно уже в два места писать, а запись в журнал "последовательная" (да еще и с O_SYNC) не потому что так быстрее, а потому что чтобы данные не потерять.
Я говорил о физическом уровне. Об оптимзиации дисковых операций в DBMS.

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

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

А для многих операций уровня ETL, bulk-load и прочих (массовых) манипуляций с данными обычно разработчик
или DBA сознательно выбирает не-транзакционный режим. Например стартует биржевая система. Она должна
в несколько минут прогрузить данные из обычной БД в свой более быстрый key-value. Я-бы здесь сознательно
выбирал отключение транзакций ибо нету еще никаких пользователей (система в процессе загрузки) и сама
по себе операция достаточно проста по реакции на ошибку. Если что-то пошло не так - просто загрузим еще разик.
Нам важнее быстро стартовать операционный день. А после старта уже пул коннекшенов подключится в режиме
транзакций как и положено.
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767448
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов, наличие оффсета как бе намекает, откуда из массива переданных байт начинать писать, а не "куда".
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767455
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЗдесь offset - применительно не к файлу а к источнику. К массиву байтов.Тогда понятно чего там int, тем не менее fos.getChannel().position() будет делать seek().

maytonПо поводу API операционной системы - вы правы. Почти все файловые API в конечно счете
будут сводится к open/fseek/read/write/close для Unix и к другим CreateFile.. (там более длинное
название в Windows). И на уровне железа будут отображаться в атомарные операции
записи сектора на диск для HDD или для какой-то примитивной операции передачи данных блочно
для SSD.Там еще есть DMA, оно же zero-copy и пр. MappedByteBuffer в жаве именно его реализует.
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767467
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов, что там реализовано в java - вообще никого не волнует, если SSD физически при записи работает с блоками по 1mb(или по сколько там?). И каждая рандомная запись блока размером меньшим 1 mb будет сопровождаться определенным кол-вом IOPs:

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

Отсюда проистекает так называемая оптимизация под железо, когда пишут сразу "нужным" размером блока", а не маленькими или большими, про то (частично) майтон и говорит.
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767478
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловТам еще есть DMA, оно же zero-copy и пр. MappedByteBuffer в жаве именно его реализует.
Аккурат в новый год у меня была попытка выпрыгнуть из Java условностей и прыгнуть
в недра ОС (в основном меня интересовали Windows-10 и Linux последних версий ядра)
чтобы понять что там и как. К сожалению сообщество отреагировало вяло. Толи
салат Оливье был плох толи Шампанськое...

Вот он кстати https://www.sql.ru/forum/1307294/tyapnichnyy-novogodniy-mmap
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767485
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Года три назад, у LevelDB драйвера для жава были какие-то ну очень кривые. Да и по тестам, отзывам, нишевой продукт с массой специфики

Когда для себя выбирал, остановился на банальном SQL Lite, лично мне скорости вполне хватило. По тестам в И-нет (сам не тестил) особого профита у LevelDb не видно, а проблемы на форуме часто описывают. Ну нафиг такие эксперементы )))
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767486
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин-прочесть весь блок из 1 метра
-заменить в нем на наш маленький блок
-записать обратноа не делает ли это всё update из любой субд?
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767489
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяrazlivПри заполнении HashMap, большим значением элементов.
Есть ли возможность свопа на диск, или другого способа экономичной работы с большиминтересно а перенос HashMap в субд не поможет?
Надо спросить у автора. Мысль здравая.
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767501
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинОтсюда проистекает так называемая оптимизация под железо, когда пишут сразу "нужным" размером блока", а не маленькими или большими, про то (частично) майтон и говорит.Оно возникает только если запись идет мимо кеша ФС, т.е. файлы нужно открывать с O_DIRECT и дальше приседать, что, к примеру, в Linux не рекомендуется делать.
...
Рейтинг: 0 / 0
Out of memory errror - есть ли возможность Свопа ?
    #39767530
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы очень не хотел обсуждать тему кеша ОС. Она очень путает карты. Особенно когда хранилище
превысило память на 10-100% а мы ради этого уже втащили в постановку key-value БД.

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

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

Рассматривать этот диапазон 10-100% я не хочу. Мне это просто неинтересно.
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Out of memory errror - есть ли возможность Свопа ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]