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

Loïc Hoguin essen@REDACTED
Mon Sep 21 12:46:04 CEST 2015


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



More information about the erlang-questions mailing list