On Tue, Nov 30, 2010 at 11:25:41AM +0100, Claudio Jeker wrote: > On Tue, Nov 30, 2010 at 10:13:13AM +0100, Otto Moerbeek wrote: > > On Tue, Nov 30, 2010 at 08:35:46AM +0100, Xavier Beaudouin wrote: > > > > > Hello, > > > > > > I have updated a openbgpd router from OpenBSD 4.7 i386 to 4.8 amd64. > > > > > > Now I have new instability like this : > > > > > > Nov 29 21:25:22 core-3 bgpd[28895]: fatal in RDE: path_alloc: Cannot > > > allocate > > > memory > > > Nov 30 02:01:47 core-3 bgpd[5522]: fatal in RDE: up_generate: Cannot > > > allocate > > > memory > > > > > > I have 2Gb on this machine and login.conf like this : > > > > > > default:\ > > > :path=/usr/bin /bin /usr/sbin /sbin /usr/X11R6/bin > > > /usr/local/bin:\ > > > :umask=022:\ > > > :datasize-max=1512M:\ > > > :datasize-cur=1024M:\ > > > :maxproc-max=2048:\ > > > :maxproc-cur=1024:\ > > > :openfiles-cur=1024:\ > > > :stacksize-cur=4M:\ > > > :localcipher=blowfish,6:\ > > > :ypcipher=old:\ > > > :tc=auth-defaults:\ > > > :tc=auth-ftp-defaults: > > > > > > This currently make me mad, because this router handle more than 130 > > > peers and > > > is still unstable. > > > > > > What is needed to make openbgpd work as it should and shuttup ? > > > > > > (I am going to add a monit... because on production day this is not > > > acceptable). > > > > > > Xavier > > > > By default daemons run in the daemon login class. Check that, also > > check if you do not have stale /etc/login.conf.db file lying around. > > > > AFAIK I know, bgpd does not increase its limits to the max, so it does > > not make sense to have different values for -max and -cur. > > > > If these things don't help, analyzing this requires some specific bgpd > > knowledge, which I do not have. > > > > Maybe it is time to change the default datalimit in the RDE. So maybe > something like this may help. > bgpd needs quite a bit more (temporary) memory when running with > softreconfig. A lot of additional memory is needed on reloads and when > large sessions flap that cause a lot of UPDATE messages. > > Side note: bgpd on amd64 needs quite a bit more memory then i386 because > of the 64bit pointers.
Two questions: - why the getrlimit() if you are seting both cur and max? - isn't it better to set cur to max? Running with no bounds feels not ok. -Otto > -- > :wq Claudio > > Index: rde.c > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v > retrieving revision 1.302 > diff -u -p -r1.302 rde.c > --- rde.c 24 Nov 2010 00:58:10 -0000 1.302 > +++ rde.c 30 Nov 2010 10:12:56 -0000 > @@ -18,6 +18,8 @@ > > #include <sys/types.h> > #include <sys/socket.h> > +#include <sys/time.h> > +#include <sys/resource.h> > > #include <errno.h> > #include <ifaddrs.h> > @@ -156,6 +158,7 @@ pid_t > rde_main(int pipe_m2r[2], int pipe_s2r[2], int pipe_m2s[2], int > pipe_s2rctl[2], > int debug) > { > + struct rlimit rl; > pid_t pid; > struct passwd *pw; > struct pollfd *pfd = NULL; > @@ -184,6 +187,13 @@ rde_main(int pipe_m2r[2], int pipe_s2r[2 > > setproctitle("route decision engine"); > bgpd_process = PROC_RDE; > + > + if (getrlimit(RLIMIT_DATA, &rl) == -1) > + fatal("getrlimit"); > + rl.rlim_cur = RLIM_INFINITY; > + rl.rlim_max = RLIM_INFINITY; > + if (setrlimit(RLIMIT_DATA, &rl) == -1) > + fatal("setrlimit"); > > if (setgroups(1, &pw->pw_gid) || > setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) ||