[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