[erlang-questions] Erlang OTP 18 memory leak / SSL
Sereysethy TOUCH
touch.sereysethy@REDACTED
Mon Sep 21 13:00:49 CEST 2015
I got it LoÏc.
Thanks.
On Mon, Sep 21, 2015 at 5:52 PM, Sereysethy TOUCH <
touch.sereysethy@REDACTED> wrote:
> 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/78e32602/attachment.htm>
More information about the erlang-questions
mailing list