Утечки при работе с HTTPS

70 views
Skip to first unread message

Сергій Костюшкін

unread,
Jul 6, 2015, 4:37:38 AM7/6/15
to erlang-i...@googlegroups.com
Всем, привет.

Многие наверно сталивались с утечками в beam при работе с HTTPS, или SSL/TLS. Мы сталкивались давно, и обходили проблему используя криптографию на уровне внеших инструментов. Пару месяцев назад стала задача которую нужно было решить без внешних инструментов. Наш апликейшн выступал в роли https клиента с огромным количеством запросов на сервер. Апликейшн выедал 5000 мб памяти за 12 часов. Перепробовали все возможные реализации https клиентов, проблема присутсвовала во всех реализациях. Т.е. проблема утечек была точно на уровне криптографии. В общем если у вас такая же проблема, то решается она довольно просто, просто добавьте в конфиг следующее:

    {ssl, [
        {session_lifetime, 600}
    ]}

Суть пролемы в том что ssl сессии в некоторых случаях завершаются некоректно, и продолжают быть открытыми до тех пор пока у них не кончится время жизни. Время жизни сессии по умолчанию - 24 часа, соответсвенно на нагруженом приложении получаем утечку. Т.е. первичная проблема заключается в некоректном завершении сессий, и данная опция ее не решает, лишь маскирует. Если кто раскопал проблему полностью, просьба описать ее здесь, и бросить баг репорт разработчикам OTP.
 

Alexey Radetsky

unread,
Jul 7, 2015, 4:17:50 AM7/7/15
to erlang-i...@googlegroups.com
Спасибо, полезно.  

понеділок, 6 липня 2015 р. 11:37:38 UTC+3 користувач Сергій Костюшкін написав:

Pavel Malik

unread,
Jul 24, 2015, 7:12:19 AM7/24/15
to erlang-i...@googlegroups.com
Привет, если еще актуально то решение есть,Денис Лаверов его нарыл.
1) Нужно в vm.args указать модуль с callback функциями, которые будут вызываться взамен стандартных, например:

-ssl session_cb dummy_session_cache


2) Добавить собственно сам модуль:

-module(dummy_session_cache).
-behaviour(ssl_session_cache_api).

-export([delete/2,foldl/3,init/1,lookup/2,select_session/2,terminate/1, update/3]).

delete(_, _) -> ok.

foldl(_Fun, Acc0, _Cache) -> Acc0.

init(_) -> lols.

lookup(_, _) -> undefined.

select_session(_, _) -> [].

terminate(_) -> ok.

update(_, _, _) -> ok.


6 июля 2015 г., 11:37 пользователь Сергій Костюшкін <s.kost...@gmail.com> написал:

--
Ви отримали це повідомлення, оскільки ви підписані на групу "Erlang в Україні" у Групах Google.
Щоб скасувати підписку на цю групу та більше не отримувати повідомлень із неї, надішліть електронний лист на адресу erlang-in-ukra...@googlegroups.com.
Щоб опублікувати допис у цій групі, надішліть електронний лист на адресу erlang-i...@googlegroups.com.
Перейдіть до цієї групи за посиланням http://groups.google.com/group/erlang-in-ukraine.

Сергій Костюшкін

unread,
Jul 24, 2015, 7:51:11 AM7/24/15
to Erlang в Україні, garu...@gmail.com, garu...@gmail.com
Это решение ничем не отличается от того что предложено выше, потому что такого же результата можно добится установив время жизни сессии в 0, что приведет к проблемам другого характера.

пʼятниця, 24 липня 2015 р. 14:12:19 UTC+3 користувач Pavel Malik написав:
Привет, если еще актуально то решение есть,Денис Лаверов его нарыл.
1) Нужно в vm.args указать модуль с callback функциями, которые будут вызываться взамен стандартных, например:

-ssl session_cb dummy_session_cache


2) Добавить собственно сам модуль:

-module(dummy_session_cache).
-behaviour(ssl_session_cache_api).

-export([delete/2,foldl/3,init/1,lookup/2,select_session/2,terminate/1, update/3]).

delete(_, _) -> ok.

foldl(_Fun, Acc0, _Cache) -> Acc0.

init(_) -> lols.

lookup(_, _) -> undefined.

select_session(_, _) -> [].

terminate(_) -> ok.

update(_, _, _) -> ok.


6 июля 2015 г., 11:37 пользователь Сергій Костюшкін написал:

Сергій Костюшкін

unread,
Jul 24, 2015, 7:52:50 AM7/24/15
to Erlang в Україні, s.kost...@gmail.com, garu...@gmail.com, s.kost...@gmail.com
Правильное решение, это найти багу в менеджере сессий. Это в общем не так уж и сложно, если на это есть время.

пʼятниця, 24 липня 2015 р. 14:51:11 UTC+3 користувач Сергій Костюшкін написав:
Reply all
Reply to author
Forward
0 new messages