Re: Bird 1.5 and 1.6 memory leak

2018-04-18 Thread Willy Goiffon

Le 2018-04-17 14:27, Alexander Demenshin a écrit :

On 2018-04-17 13:31, wi...@mailoo.org wrote:

As I said, the mem leak does not apppear in the `birdc show memory` 
command.

It is shown at the OS level, and is shown via the `free` command.


What do you mean by "OS level"? Which exactly level? What is the actual 
process

size as reported by ps ("ps axuw|grep bird")?


By "OS Level" I mean the memory used as reported by the kernel from 
/proc/meminfo.

The process size is rather standard:

bird 1737 0.0 0.0 15540 2216 ? Ss Apr17 0:01 /usr/sbin/bird -f -u 
bird -g bird


If I sum up the size of all processes, I don't even reach 1Gib. But the 
memory used

reported by the kernel increases gradually until it reaches OOM.

If ps shows size similar to what you see in birdc "show mem", then the 
leak

is definitely not in bird (though it may be related) - it is in kernel
or some other process.


It might not be in bird, but it is definitely triggered by it.

Thanks
--
Willy


Re: Bird 1.5 and 1.6 memory leak

2018-04-18 Thread Willy Goiffon

if it occurs also on 1.6.4, could you please add also "birdcl show
route count" output and some logs with debug all switched on?


I had to reinstall version 1.5.0, to remain in the ubuntu default PPA.
The route count is ridiculously low though:

$ birdc show route count
BIRD 1.5.0 ready.
11 of 11 routes for 11 networks


How does it get leaked, do you reconfigure many times? Does the memory
consumption increase gradually or by larger amounts?


It seems to leak at the kernel level, as the process memory doesn't 
increase.

I'm not doing any reconfiguration. It increases gradually and is closely
tied to the traffic crossing the router.
If I stop any traffic from passing (eg, using iptables), the memleak 
stops.


As I said, I also don't have this leak if I leave bird down and 
configure

the routes statically.


Re: Bird 1.5 and 1.6 memory leak

2018-04-17 Thread willy
> debian stretch, bird v 1.6.3-2 is rock solid
> 
> FWIW i saw zero leaks or issues on debian wheezy, jessie, devuan jessie 
> either.
> 
> on multiple rrs taking several million routes I am at:
> 
> birdc
> BIRD 1.6.3 ready.
> bird> show mem
> BIRD memory usage
> Routing tables:126 MB
> Route attributes:   93 MB
> ROA tables:112  B
> Protocols: 823 kB
> Total: 219 MB

As I said, the mem leak does not apppear in the `birdc show memory` command.
It is shown at the OS level, and is shown via the `free` command.
The leak was also present with v1.6.3  on ubuntu though.
Note that I don't have that much routes (~20), so the leak is not related to 
that IMO.

> alpine linux also works very well, no issues taking multiple full tables 
> on core/edge as well:
> 
> (host: core1)  (user: root)  (time= 11:23:53)
>   > ~ # birdc
> BIRD 1.6.0 ready.
> bird> show mem
> BIRD memory usage
> Routing tables:182 MB
> Route attributes:  156 MB
> ROA tables:192  B
> Protocols: 686 kB
> Total: 339 MB
> bird>

Unfortunately, switching to alpine or debian is not an option in my case.

Thank you for the input!



Bird 1.5 and 1.6 memory leak

2018-04-13 Thread Willy Goiffon

Hello,

I installed different version of bird on Ubuntu 16.04 (namely, 1.5.0, 
1.6.3, 1.6.4).

After leaving the daemon running for ~1 hour, the memory used by the
host is over 8Gib. However, when running `birdc show memory`, I get
the following:

BIRD memory usage
Routing tables: 21 kB
Route attributes:   11 kB
ROA tables:192  B
Protocols:  22 kB
Total: 102 kB

My config is pretty basic (edited, see attached) as we have 2 BGP
protocols using 2 ASN (one public, one private), each exporting the
routes learnt from the other.

The leak seems to be related to the traffic going through the server,
as the memory of the host remains still when there is no traffic
going on. It is triggered by bird though, because I don't have the
leak when the routes are configured statically and bird is shut down.

The weird thing about this is that the memory is not used by the bird
process itself. It's shown as used memory by the host, but no process
is actually using this memory.
I know that it's leaking because of bird though because it's the only
process installed and running on this host.

Has anyone ever encountered such a behavior, or can see an issue in
my configuration?

Thanks in advance for your help
--
Willyrouter id 1.2.3.4

define ASPUB = 12345;
define ASPRV = 42;

filter private_in
prefix set private_networks;
{
private_networks = [ 1.1.1.0/24+, 2.2.2.0/24+ ];

if (net ~ private_networks) then accept;
reject;
}

filter public_in
prefix set public_networks;
{
public_networks = [ 3.3.0.0/16+, 0.0.0.0/0 ];

if (net ~ public_networks) then accept;
reject;
}

filter private_out
prefix set private_networks;
{
private_networks = [ 0.0.0.0/0 ];

if (source = RTS_BGP && net ~ private_networks) then accept;
reject;
}

filter public_out
prefix set public_networks;
{
public_networks = [ 1.1.1.0/24+, 2.2.2.0/24+ ];

bgp_path.empty;
bgp_path.prepend(ASPUB);
if (source = RTS_BGP && net ~ public_networks) then accept;
reject;
}

protocol kernel {
scan time 5;
import none;
export all;
}

protocol device {
scan time 10;
}

protocol bgp public {
local as ASPUB;
neighbor 1.2.3.5 as 54321;
next hop self;

export filter public_out;
import filter public_in;
};

protocol bgp private {
local as ASPRV;
neighbor 10.11.12.13 as 420001;
next hop self;

export filter private_out;
import filter private_in;
};