resource leak
Wayne Sierke
ws at au.dyndns.ws
Thu Oct 2 07:40:55 UTC 2008
On Wed, 2008-10-01 at 16:36 -0400, Stephen Clark wrote:
> Robert Watson wrote:
> > On Wed, 1 Oct 2008, Gary Palmer wrote:
> >
> >> "ps alxw" may be of interest in addition to "ps auxw" as it displays
> >> what the processes are waiting on. It could conceivably be a problem
> >> of some kind at the filesystem level. I've seen situations before
> >> where a problem escalates to the point where "ls /" hangs, and at that
> >> point you're stuck with an unresponsive box.
> >
> > If you want an even greater level of detail than ps -l, you can use
> > procstat -k to generate kernel stack traces for all user/kernel
> > threads. Wait channels are very useful, but they only tell you what the
> > code that invoked the wait thinks it is for, not how that code was
> > reached. A classic example is waiting on an exhausted UMA zone -- you
> > get a uma wait channel, but no indication of what subsystem performed
> > the memory allocation... This required FreeBSD 7.1 and higher,
> > however. (Obviously, the same can be done easily using DDB, but that's
> > hard on a box without a serial console, and requires interrupting the
> > flow of the operating system, compiling with DDB, etc).
> >
> > Robert N M Watson
> > Computer Laboratory
> > University of Cambridge
> >
> A big part of problem is this seems to take about 100 days of uptime to occur.
> We have some inhouse test boxes but have never seen the problem, probably
> because non of them have been up more than about 45 days. The units in the
> field, of which there is about 300, are headless and none are physically close.
>
> When the boxes are rebooted there are no error messages in any of the log files,
> only the absence of information that would normally be logged by new processes
> that would be spawned. We are getting ready to install a patch that will try to
> gather more information.
>
> I thought about writing an app the would try to fork a child periodically and
> record in a log file if there was an error. But EAGAIN is nonspecific as to the
> real reason the fork failed. I was looking for some way to periodically log the
> resources that would cause the fork failure.
>
> procstat -k looks like it would have been a good candidate but unfortunately we
> are running 6.1.
>
> Thanks for the response.
> Steve
I have a VIA EPIA-based system that was rebooting and not leaving behind
any diagnosable evidence that I could find. Attaching a serial console
revealed a kernel-trap which was double-faulting as it went to write the
kernel dump. I've not yet had the opportunity to investigate further
except that out of desperation I threw in an additional 64M of RAM - all
I had to hand - adding to its 256M and I haven't seen it fault again in
the 37 days since (it would often stay up for less than a day before
that).
I wonder whether it would be worth your while running a bench unit with
limited RAM, either physically or via the hw.physmem tunable. I would
probably try to identify the amount of RAM that just allows it to run
"normally", ideally subjecting it to a typical workload if possible. If
it bombs after running for a reasonable length of time, add back a
fraction of the unused memory and see if it then stays up proportionally
longer which could be indicative of a memory starvation issue.
If you can get it to bomb in the above scenario then you can probably
get some insight into where it's failing. Having said that, I should
point out that I've not actually used the above technique so I may well
be overlooking something which might prevent it from being useful or
indeed from "working" at all.
Wayne
More information about the freebsd-stable
mailing list