100% CPU load

Ronnie Sahlberg sahlberg at au1.ibm.com
Tue Jan 12 15:15:57 MST 2010


Merged and pushed.
Thanks

"Stefan (metze) Metzmacher" <metze at samba.org> wrote on 13/01/2010 03:32:58:

> "Stefan (metze) Metzmacher" <metze at samba.org>
> 13/01/2010 03:32
>
> To
>
> Rusty Russell <rusty at rustcorp.com.au>
>
> cc
>
> ronnie sahlberg <ronniesahlberg at gmail.com>, Samba Technical <samba-
> technical at lists.samba.org>
>
> Subject
>
> Re: 100% CPU load
>
> Rusty Russell schrieb:
> Hi Ronnie,
>
> >> I've found another problem with ctdbd spinning
> >> with 100% CPU load reading 0 bytes from the log child.
>
> Here're the fixes for the spinning.
>
> The problem were the dup2() call in the wrong direction, which implicit
> closed the stdout.
>
> git pull git://git.samba.org/metze/ctdb/wip.git master-for-ronnie
>
> metze
>
> >>
> >> ctdb_log_handler()
> >>
> >> gets n = 0 from read and log is log_state.
> >>
> >> I think it's wrong that we don't test for n <= 0 and not error out.
> >>
> >> I don't understand the code enough to fix it for the log == log_state.
> >
> > This is connected to stdout and stderr, so it should *never* be closed.
> > Hence Ronnie's patch description:
> >
> > commit bcf494b81f4277dc75f05faccf0c446bd15f6e2b
> > Author: Ronnie Sahlberg <ronniesahlberg at gmail.com>
> > Date:   Tue Dec 15 19:04:52 2009 +1100
> >
> >     This is a dodgy patch.
> >
> >     I saw once where the master ctdbd logging structure was talloc
freed
> >     which caused issues.
> >     So only free the structure if it is NOT the master structure.
> >
> >     This needs to be looked into in more detail.
> >
> > I've added a hack to log closing of stdout/stderr, and I don't hit
> anything in
> > normal running (the parent closes them to set up logging, that's it):
> >
> > commit 6bcf19397e33cc7e4c63bdd3688003ae3a3add5c
> > Author: Rusty Russell <rusty at rustcorp.com.au>
> > Date:   Mon Dec 21 15:34:28 2009 +1030
> >
> >     patch who-is-closing-stderr.patch
> >
> > diff --git a/lib/replace/replace.c b/lib/replace/replace.c
> > index cec158b..3b8dac8 100644
> > --- a/lib/replace/replace.c
> > +++ b/lib/replace/replace.c
> > @@ -621,3 +621,25 @@ int rep_socketpair(int d, int type, int protocol,
> int sv[2])
> >     return pipe(sv);
> >  }
> >  #endif
> > +
> > +#undef close
> > +int _close(int fd)
> > +{
> > +   if (fd == 0 || fd == 1 || fd == 2) {
> > +      static int errorfd = -1;
> > +      char msg[100];
> > +      if (errorfd == -1) {
> > +         int lowfd = open("/tmp/close-errors.log",
> > +                O_WRONLY|O_APPEND|O_CREAT, 0600);
> > +         if (lowfd < 0)
> > +            abort();
> > +         if (dup2(lowfd, 1000) < 0)
> > +            abort();
> > +         close(lowfd);
> > +         errorfd = 1000;
> > +      }
> > +      sprintf(msg, "Warning: %i closing fd %i!\n", getpid(), fd);
> > +      write(errorfd, msg, strlen(msg));
> > +   }
> > +   return close(fd);
> > +}
> > diff --git a/lib/replace/replace.h b/lib/replace/replace.h
> > index f8a89a7..ad471c4 100644
> > --- a/lib/replace/replace.h
> > +++ b/lib/replace/replace.h
> > @@ -546,4 +546,6 @@ typedef int bool;
> >  #define QSORT_CAST (int (*)(const void *, const void *))
> >  #endif
> >
> > +#define close(x) _close(x)
> > +
> >  #endif /* _LIBREPLACE_REPLACE_H */
>
>
>
> [attachment "signature.asc" deleted by Ronnie Sahlberg/Australia/IBM]



More information about the samba-technical mailing list