[erlang-questions] Erlang OTP 18 memory leak / SSL

Sereysethy TOUCH touch.sereysethy@REDACTED
Mon Sep 21 12:52:07 CEST 2015


Something like this?

{release, {ws_user, "1"},

        [ws_user]}.

{sys_config, "./config/sys.config"}.

%{paths, ["../deps/"]}.

% generate startup script, yes

{extended_start_script, true}.

On Mon, Sep 21, 2015 at 5:46 PM, Loïc Hoguin <essen@REDACTED> wrote:

> Add {sys_config, "path/to/sys.config"} to your relx.config, then create
> that sys.config file with the right options and run make.
>
> On 09/21/2015 12:44 PM, Sereysethy TOUCH wrote:
>
>> 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
>> <mailto: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> <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> <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>
>>         <mailto: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>
>>         <mailto: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>
>>         <mailto: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>
>>                      <mailto: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>
>>                          <mailto: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>
>>                              <mailto: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>
>>                          <mailto:erlang-questions@REDACTED
>>         <mailto:erlang-questions@REDACTED>>
>>         http://erlang.org/mailman/listinfo/erlang-questions
>>
>>
>>
>>
>>
>>
>>
>>         _______________________________________________
>>         erlang-questions mailing list
>>         erlang-questions@REDACTED <mailto: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
>>
>>
>>
> --
> 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/47cccbae/attachment.htm>


More information about the erlang-questions mailing list