[erlang-questions] Erlang OTP 18 memory leak / SSL
Sereysethy TOUCH
touch.sereysethy@REDACTED
Mon Sep 21 12:44:09 CEST 2015
Hello,
You meant _rel or I need to create a folder "rel" and put sys.config inside?
Sethy
On Mon, Sep 21, 2015 at 5:09 PM, Loïc Hoguin <essen@REDACTED> wrote:
> On 09/21/2015 12:05 PM, Sereysethy TOUCH wrote:
>
>> Hello,
>>
>> My application is both TLS-client & server. It is a web server which
>> allows client browser to connect to server using websocket. I use cowboy
>> as web server & web socket server.
>>
>> In erlang 17, our application runs for weeks and there is no memory
>> issue. We only restart it whenever we have a new update. But since we
>> update to elang 18, we need to restart our application every 2 hours.
>>
>> I use erlang.mk <http://erlang.mk> to compile our application, I am not
>> sure how to set application env. settings. Is it the same if I use
>> erlang.mk <http://erlang.mk>?
>>
>
> If you run a release, you can put the configuration in the sys.config file
> (by default rel/sys.config) and run make again. See
> http://www.erlang.org/doc/man/config.html
>
> Thanks,
>> Sethy
>>
>> On Mon, Sep 21, 2015 at 4:54 PM, Ingela Andin <ingela.andin@REDACTED
>> <mailto:ingela.andin@REDACTED>> wrote:
>>
>> Hi!
>>
>>
>> 2015-09-21 10:09 GMT+02:00 Sereysethy TOUCH
>> <touch.sereysethy@REDACTED <mailto:touch.sereysethy@REDACTED>>:
>>
>>
>> Hello,
>>
>> One question, why did my application work fine on Erlang 17.5.x
>> branch?
>>
>>
>> Well I am not sure what your application does.
>>
>> If you have a client application that spawns a lot of parallel
>> connections to the same host, not waiting for one to succeed before
>> spawning,
>> the client session table could grow a lot. However I have
>> implemented a feature to only save unique TLS-sessions in this
>> senario to avoid this, and there was a bug so that this feature did
>> not work, that I have fix in the maint branch. This bug however was
>> in 17 as well as 18.
>>
>> However the ets info you sent suggest you have a server application
>> and then setting session_liftime can help keeping the servers
>> session table
>> smaller. This also is true for clients, that can get a big table
>> also through connecting to many diffrent servers.
>>
>> Maybe your application can be both a TLS-client and server? There is
>> no obvious reason from what you told us so far that it should work
>> better in 17 then 18.
>>
>>
>> If I want to set this session_lifetime option, where should put
>> it?
>>
>>
>> It is an application environment setting. Search for app in the docs.
>>
>>
>> So there is no use that I should build the erlang 18 from maint
>> branch?
>>
>>
>>
>> It is always a good thing to try the latest version, and if you
>> still have a problem it would be good if you could try providing a
>> way to reproduce the problem.
>>
>> Regards Ingela Erlang/OTP tema Ericsson AB
>>
>>
>> Thanks,
>> Sethy
>>
>> On Mon, Sep 21, 2015 at 2:51 PM, Ingela Andin
>> <ingela.andin@REDACTED <mailto:ingela.andin@REDACTED>> wrote:
>>
>> Hello,
>>
>> 2015-09-20 15:24 GMT+02:00 Sereysethy TOUCH
>> <touch.sereysethy@REDACTED
>> <mailto:touch.sereysethy@REDACTED>>:
>>
>>
>> Hello,
>>
>> I did as what you told me by getting a shell console on
>> the node.
>>
>> I run memory(). and see ets ate the most memory. And it
>> increased overtime. I run ets:i(). and I found out the
>> ssl_manager took a big chunk of what memory used.
>>
>> 32794 client_ssl_otp_session_cache ordered_set
>> 0 89 ssl_manager
>> 36891 server_ssl_otp_session_cache ordered_set
>> 1564 67995 ssl_manager
>> 40993 httpc_manager__session_cookie_db bag 0
>> 299 httpc_manager
>>
>> So I think there is a problem with ssl_manager in Erlang
>> OTP 18.
>>
>> Any workarounds?
>>
>>
>>
>> Ok, the bug I fixed with the session table is on the client
>> side. But your big ets table is on the server side.
>> Session data is by default fairly long lived (24 h that is
>> the max recommended time to keep a session by the RFC),
>> you can set the ssl application variable session_lifetime to
>> make its lifetime shorter which should mitigate your problem.
>> We have a backlog item to make a configurable threshold of
>> max sessions allowed to be stored in the table, which I am
>> sure will be
>> implemented fairly soon but alas not for 18.1.
>>
>> Regards Ingela Erlang/OTP Team - Ericsson AB
>>
>> Sethy
>>
>> On Sun, Sep 20, 2015 at 2:22 AM, Jesper Louis Andersen
>> <jesper.louis.andersen@REDACTED
>> <mailto:jesper.louis.andersen@REDACTED>> wrote:
>>
>>
>> On Sat, Sep 19, 2015 at 6:34 PM, Sereysethy TOUCH
>> <touch.sereysethy@REDACTED
>> <mailto:touch.sereysethy@REDACTED>> wrote:
>>
>> I just recently updated Erlang to latest version
>> OTP 18 on Ubuntu server. It uses cowboy
>> (websocket), ranch, ssl, erlydtl & rabbitmq. It
>> used to work fine in OTP 17. The program is
>> correctly compiled but during the execution the
>> memory kept increasing. I need to restart the
>> process every one or two hours to free some
>> memory.
>>
>>
>> 1. Get a shell console on the node
>> 2. call 'memory().' in the shell
>> 3. If it reports ets as the winner, call
>> 4. ets:i().
>>
>> This will give you a nice overview for where to look
>> and verify it is the SSL problem.
>>
>>
>> --
>> J.
>>
>>
>>
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> <mailto:erlang-questions@REDACTED>
>> http://erlang.org/mailman/listinfo/erlang-questions
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-questions
>>
>>
> --
> Loïc Hoguin
> http://ninenines.eu
> Author of The Erlanger Playbook,
> A book about software development using Erlang
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20150921/6d9fad18/attachment.htm>
More information about the erlang-questions
mailing list