|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
mayton Почему винда не интересует? потому что меня интересует только серверный кодинг а на винде у меня серверов не было уже лет 15, и не будет никогда у меня есть всего 1 стационарка на винде, но и та уедет на линух скоро максимум, на что я могу променять линух, это на фрю. Но пока не знаю зачем... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:16 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev 2 ^ 64 ? А во-вторых - виртуальное адресное пространство далеко не бесплатно. В "прямой" схеме x86-архитектуры каждые полные или неполные два мегабайта линейного (виртуального) адресного пространства требуют одну физическую (4КБ) страницу в таблице страниц диспетчера виртуальной памяти. Большие страницы не рассматриваем - это отдельный класс виртуальной памяти и он далеко не универсальный. В худшем случае "разреженного" выделения одна (виртуальная) страница данных (приложения) потребует одной (физической) страницы для данных VMM. Плюсом идёт то, что у каждого процесса - собственная карта виртуальной памяти, что ещё больше увеличивает расходы на управление (виртуальным) адресным пространством. Фрагментировать "не такое большое" (по факту) адресное пространство - вполне реально. JVM всегда требует сплошного адресного пространства, даже если конкретное приложение могло бы обойтись "отдельными кусками". Насколько я понимаю, решаться это будет рамках нового API для работы с внешней памятью: JEP 370: Foreign-Memory Access API (Incubator) ( Java 14 ). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:19 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Basil A. Sidorov JVM всегда требует сплошного адресного пространства вот это я и не понимаю ((( адресное пространство все равно будет отображено на конкретные страницы физической памяти. Т.е. выделение _новой_ памяти для процесса должно идти постранично, кусками по 4 Kb (в случае обычных страниц). Один кусок физической памяти нафиг не нужен. Почему фрагментация внутри ОС (физической памяти) сказывается на приложении, мне не очень понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:26 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev 2. У нас проблема была на более ровном месте. Компьютер с 32 Гб памяти, свободно 25 Гб. Пытаемся запустить Java VM с 20 Gb - облом, две Java VM с heap по 10 - нормально. Windows 7, Java толи 7, толи 8. На "свежей" ОС, после перезагрузки, Java с 20 heap'ом запускается Как-то неудачно, ИМХО, реализован Java VM heap в таком случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:28 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
petrav Как-то неудачно, ИМХО, реализован Java VM heap в таком случае. vector на триллион объектов ( C ) может быть Алексей Роза раньше в sun работал ? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:34 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev вот это я и не понимаю ((( Возврат неиспользуемой памяти операционной системе появился далеко не сразу и далеко не во всех сборщиках мусора. Отказ запускаться с фрагментированной кучей сразу - вполне разумное решение. Со своими недостатками, но это можно сказать о большинстве практичных общецелевых технических решениях. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:34 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Basil A. Sidorov JVM _вообще_ не запускалась, вываливалась в момент старта с кодом OS - не хватает памяти. Windows ей память выделить не мог. Аналогиная проблема лет много назад вроде в форуме Delphi поднималась. Память на компе есть, свободная, Windows / RT одним куском ее выделять не хочет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:36 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
petrav Leonid Kudryavtsev 2. У нас проблема была на более ровном месте. Компьютер с 32 Гб памяти, свободно 25 Гб. Пытаемся запустить Java VM с 20 Gb - облом, две Java VM с heap по 10 - нормально. Windows 7, Java толи 7, толи 8. На "свежей" ОС, после перезагрузки, Java с 20 heap'ом запускается Как-то неудачно, ИМХО, реализован Java VM heap в таком случае. Обычно расчитывают и выделяют minimal footprint (Xms). А Xmx уже указывает потенциально возможный размер до которого можно расти. Это хорошая практика для управления ресурсами. Ситуация с падением 20Гб не говорит ниочем. Надо смотреть конкретную ОС и что было в логах jvm и логах ОС в это время. Возможно это был баг. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:38 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Почему фрагментация внутри ОС (физической памяти) Для физической памяти нет понятия фрагментации - страницы отображаются в линейное адресное пространство процесса как богVMM положит. Исключение - драйвера, работающие с устройствами ввода-вывода и устройствами, отображающими свою память в (физическое) адресное пространство процессора, "но это уже совсем другая история". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:40 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
mayton Обычно расчитывают и выделяют minimal footprint (Xms). А Xmx уже указывает потенциально возможный размер до которого можно расти. Это хорошая практика для управления ресурсами.... IMHO это как раз таки дебильная практика для управления ресурсов нормальная это Xms = Xmx Double IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:41 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Windows ей память выделить не мог. Как говорил великий комбинатор: "Я бы взял частями, но мне нужно сразу". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:44 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Leonid Kudryavtsev Почему фрагментация внутри ОС (физической памяти) вот я это и не понимаю оно же у каждого процесса своя? или я не прав и оно едино для всех процессов в ОС? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:45 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Возьмем например "обычное" 32 бит приложение в среде Windows с 32 Gb RAM на компьютере. Нашему приложению выделять 2 Гбайта только его "линейно-адресуемого (виртуального) адресного пространства" + будет еще свободное окно в 2 Gb для доступа к адресному пространству OS /назовем это так/. Ключем /3Gb это поведение можно поменять и будет 3 + 1 Gb. Я почему-то наивно думал, что у 64 битного приложения все так же, только побольше ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:48 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev оно же у каждого процесса своя? или я не прав и оно едино для всех процессов в ОС? Процесс может запрашивать и глобальные объекты, которые могут отображаться на одинаковые адреса в пространстве всех процессов. Глобальные объекты могут, наверное, и неявно создаваться операционной системой. Одинаковые линейные адреса глобальных объектов для всех процессов могут назначаться по соображениям, например, эффективности и скорости. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 17:55 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Возьмем например "обычное" 32 бит приложение в среде Windows с 32 Gb RAM на компьютере. P.S. Не надо сравнивать 32- и 64-разрядные системы напрямую - сохранение (ограниченной) обратной совместимости оно тоже не бесплатное. Ну и лобовые экстаполяции - очень вредно: появляются дебильные темы про векторы из триллиона элементов и такие же вопросы про эффективность их кэширования. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 18:06 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Т.е., у нас есть как минимум: 1. физическая память 2. адресное пространство ОС 3. адресное пространство конкретного процесса вот я и не понимаю, как "фрагментация" 1 и 2, может помешать выделить большой кусок памяти для/в 3-ем. Т.к. "маппинг" осуществляется с гранулярностью одна страница и проблемы "одним куском" быть не должно в принципе IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 18:06 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev вот я и не понимаю, как "фрагментация" 1 и 2, может помешать выделить большой кусок памяти для/в 3-ем. Просто потому, что "пойдя на принцип" не получится задействовать глобальные страницы, которые только и могут "пережить" смену карты памяти при переключении с одного процесса на другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 18:11 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Basil A. Sidorov в лучшем - в пределах 1700MiB 1700 heap + код JVM + стеки для потоков + PermGet + 64 Mb для JIT ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 18:11 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Thanks ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 18:14 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev 1700 heap + код JVM + стеки для потоков + PermGet + 64 Mb для JIT Не факт, что произвольный 32-разрядный бинарь будет правильно работать с этим флагом, когда реально "залезет" за второй гигабайт, но, в теории, можно запросить почти 4ГБ. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 18:15 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
в 1 Gb Linux (Free AWS instance) я вообще Java 1.9 запустить не смог. Не разобрался, как non heap memory уменьшить. Плюнул и поставил 1.8 ))) Вроде в пределе для 32 битного приложения в Windows доступно до 3 Gb. AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 18:19 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Вроде в пределе для 32 битного приложения в Windows доступно до 3 Gb. AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 18:26 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsevвот я и не понимаю, как "фрагментация" 1 и 2, может помешать выделить большой кусок памяти для/в 3-ем. Фрагментация как раз происходит в 3-м, о первом и втором можно просто забыть. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 18:28 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev mayton Обычно расчитывают и выделяют minimal footprint (Xms). А Xmx уже указывает потенциально возможный размер до которого можно расти. Это хорошая практика для управления ресурсами.... IMHO это как раз таки дебильная практика для управления ресурсов нормальная это Xms = Xmx Double IMHO У тебя в профиле виден Oracle. Тогда ты наверное помнишь что такое initial extent для таблиц. Ps. Тоже имхо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 18:40 |
|
vector на триллион объектов
|
|||
---|---|---|---|
#18+
mayton Тут как раз наоборот. Таблица может расти - это ее нормальное поведение. Но "расти" для работающего __серверного__ приложение - что-то не то в консерватории или memory leak. Выделять ресурсов для серверного приложения нужно ровно столько, сколько ему необходимо. Если сервер выделенный (в оптимале) то выделять всю память. Это как покупать выделенный сервер с 32 Гб оперативной памяти для Oracle и заставлять Oracle работать в 1 Gb памяти, а остальное оставить на всякий случай для OS / админа. В ситуации с микро-сервисами не лучше. Т.к. Java более-менее хорошо умеет добавлять память к Heap из свободной памяти ОС, а вот освобождать ее она не очень любит. Это поведение можно поменять ключами, но вот лично я, трогать данные настройки побоялся бы. IMHO для __серверов__ единственное вменяемое решение a) Xms=Xmx b) ни или Xms в рабочий объем + завышенный Xmx на всякий случай (который никогда не достигается) с информированием службы поддержки о сбое сервера (memory leak) и необходимости его ребута. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 18:48 |
|
|
start [/forum/topic.php?fid=57&msg=39991555&tid=2017354]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
171ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 293ms |
0 / 0 |