185 похожих чатов

Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl,

которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-то реализация gen_statem)? Сам процесс хранит в своем состоянии сертификат сервера, приватный ключ сертификата и цепочку сертификатов УЦ. В итоге получается около 100-150 Кб данных в состоянии процесса. Если таких процессов сотни тысяч, получается немало.
Я находил информацию о том, что если в настройках приложения ssl указывать ссылку на файл сертификата и на файл с приватным ключом сертификата, то ssl хранит сами файлы в ets, а в состоянии процесса хранит только ссылку. Я так пробовал, но в состоянии процесса все равно хранится и ссылка на файлы и сам сертификат с приватным ключом.
Никто такую задачу не решал, не пытался уменьшить размер состояния процесса-соединения в ssl?

20 ответов

5 просмотров

бинари копируются в/из ets, не очень понятно, как это уменьшит потребление памяти, потому что в моменте сотни тысяч процессов будут иметь свою копию данных

+1 к сборке мусора (для начала) 45> erlang:process_info(<0.549.0>, memory). {memory,197560} 46> erlang:garbage_collect(<0.549.0>). true 47> erlang:process_info(<0.549.0>, memory). {memory,122680}

Danil Zagoskin
+1 к сборке мусора (для начала) 45> erlang:proces...

есть опция к сокету HibernateAfter = maps:get(hibernate_after, SSLOpts, infinity),

Алексей- Автор вопроса

а вообще не очень понятны условия, в которых это становится проблемой. 10000 сокетов по 150КБ — это всего 1.5 ГБ, что не выглядит ужасом.

Danil Zagoskin
а вообще не очень понятны условия, в которых это с...

Если у тебя сервер на 2 гигабайта это проблема

Lama Lover
Если у тебя сервер на 2 гигабайта это проблема

мне гораздо интереснее реальные условия автора вопроса, а не домыслы

Алексей- Автор вопроса
Danil Zagoskin
мне гораздо интереснее реальные условия автора воп...

Условия сложно раскрыть. В целом ситуация такая, есть long polling сервер, к которому подключаются 100.000 клиентов. Чисто на подключение уходит 11 Гб + еще будет уходить сколько-то Гб на на саму работу в рамках подключения. Поэтому хотелось бы уменьшить эти 11 Гб, потому что 11 Гб просто на открытие соединения выглядит объемно. Удалось раскрыть условия?

Алексей
Условия сложно раскрыть. В целом ситуация такая, е...

да, это понятная задача. Ну и в целом да, hibernate или ужесточение GC (глобально или в receiver_spawn_opts) — низковисящие фрукты

Алексей- Автор вопроса
Алексей
Условия сложно раскрыть. В целом ситуация такая, е...

Да, 100.000 клиентов - это начальная цифра. Самих клиентов в пределе будет больше в несколько раз

Алексей
Условия сложно раскрыть. В целом ситуация такая, е...

где-то в issues otp на гитхабе поднималась тема ssl и потребления памяти. рекомендую поиском пройтись

Алексей- Автор вопроса
Danil Zagoskin
да, это понятная задача. Ну и в целом да, hibernat...

Спасибо, на receiver_spawn_opts тоже посмотрю

Алексей
Попробую

и открытый есть на тему сертов https://github.com/erlang/otp/issues/8598

Sergei
где-то в issues otp на гитхабе поднималась тема ss...

То есть язык и архитектура, которые де-факто слывут лучшими в мире распределенных и параллельных систем имеют проблемы с SSL?! 👀

Keiman
То есть язык и архитектура, которые де-факто слыву...

Слишком толсто. Меня всё устраивает. А если б не устраивало, починил бы сам

Keiman
То есть язык и архитектура, которые де-факто слыву...

В последних версиях переключились на третью версию опенссл, перелопатили стек и до сих пор что-то допиливают/улучшают. Так что некоторые проблемы есть, но они решаются.

Sergei
Слишком толсто. Меня всё устраивает. А если б не у...

Ни на что не намекал, просто в удивлении.

Keiman
Ни на что не намекал, просто в удивлении.

Нет там потребления 1.5гб на 1000 соединений - это виртуальное потребление, на деле почти все данные расшарены и процесс потребляет на порядки меньше (ну или только в пике, до первого gc). И то, что указали выше - сделать hibernate_after - это не костыль. Просто тут торговля - или всё в памяти и кэшах, чтобы быстро, или компактится для уменьшения потребления. У человека юзкейс - долгоживущие малоактивные процессы, так что просто флажок надо выставить и всё будет хорошо. Ну и люди в чате тоже правильно говорят - а ты думаешь в других серверах будет лучше? Здесь то избыточное потребление озу из за того, что каждый процесс изолирован, можно и без изоляции - а потом смотреть кордампы, когда ssl что-то там не осилил и все возможные секьюр ищьюсы с чтением за пределами памяти и коррамтами памяти, утечками и вот это всё.

Похожие вопросы

Обсуждают сегодня

Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
48
Мне тут приспичило встроить в программу форматировние текста SQL, расставить переносы строк и отступы так, чтобы лучше читалось. Я что-то свое изобразил, оно после ключевых сл...
Sergey Bodrov
11
а проверьте, собирается ли у кого сейчас транк лазаря через делюкс? у меня вот: fpcupdeluxe: info: Lazarus Native Installer (BuildModuleCustom: UserIDE): LazBuild: building Us...
Iluha Companets
20
добрый день. возможно ли изменить цвет окон лазаруса? Как?
Budemposmotret
35
This is a big issue. Just by being a citizen of a country, you are denied to contribute to Open Source software: https://youtu.be/L5Ec5jrpLVk?si=1iIuHnMPbCB4anV-
Sharuzzaman Ahmat Raslan
72
Такой вопрос: Почему DocLister, если указать другие шаблоны для пагинации - ко всем указанными шаблоном присваивается пустая строка?
Кирилл Гацевич
11
Господа, а кто-нибудь сталкивался с размещением на TTabControl/TTabSheet множества контролов (> 100) с последующими External: Access violation? Вот буквально на ровном месте. ...
Dmitry
29
2 вопроса таких возникли: 1. В магазине c commerce для цены есть два поля, может запорлнено либо то, либо то. Как сделать чтобы он брал цену из второго поля тоже? 2. У товаров...
Artem
6
Вот например простой пример, как получить стоимость хешрейта монеты монеро с сайта whattomine.com c использование сеарилизатора при парсинге JSON TaskProfit := TTask.Run(proc...
Delphi Coder
2
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Карта сайта