:: Re: [Libbitcoin] libbitcoin-server …
Top Page
Delete this message
Reply to this message
Author: mlmikael
Date:  
To: Eric Voskuil, libbitcoin
Subject: Re: [Libbitcoin] libbitcoin-server update
On 2015-07-03 16:02, Eric Voskuil wrote:

>>> The proactor pattern is used by libbitcoin::network (as well as node
>>> and
>>> server). This pattern inherently allows an unbounded increase in
>>> memory
>>> consumption in the case where incoming messages are not processed as
>>> fast as they are received. This is a very efficient pattern in one
>>> sense
>>> as it avoids most locking and minimizes thread consumption. On the
>>> other
>>> hand it achieves this through queueing all actions.
>>> It is currently possible for libbitcoin to fail during sync due to
>>> excess memory consumption. I consider this a bug. The fix I provided
>>> prevents the stall but in some cases it may exacerbate the memory
>>> consumption issue. This could be considered a self-inflicted DoS. The
>>> networking stack needs a more robust poller (so we don't self-induce
>>> a
>>> failure) as well as DOS protection (so we can shed messages and/or
>>> connections that are likely to induce a failure).


>> Ah right, this was discussed almost two years ago.
>>
>> What's the very-worst-case memory consumption scenario right now, like
>> Big (as in 10:s of GB:s)?


> Worst case is as much memory as the OS will give the process. Without
> code changes the easiest mitigation is the restart the process if
> memory exceeds your limit.



Say you give it 2GB max memory and have a script that automatically
restarts after crash, will the error repair itself over time?


Any plans to fix it?


While this architecture glitch is there, are there any particular do:s
and don't:s terms of system setup and node API use, for it to work as
well as possible?


(Btw some Linuxes lack max memory size so by default they'd crash and
burn.)

Thanks!