Recovery from mbuf cluster exhaustion
Peter Bozarov
peter.bozarov at moniforce.com
Wed Oct 8 03:11:40 PDT 2003
Hi, all,
(First off, I hope I'm posting to the right list.)
I have the following question regarding mbuf cluster exhaustion.
If I've managed to exhaust the pool, I start getting the usual
"All mbuf clusters exhausted, please see tuning(7)." message.
Now, at that point this is what my mbuf pool looked like:
[grid] ~ $ netstat -m
4305/4944/18240 mbufs in use (current/peak/max):
4305 mbufs allocated to data
4560/4560/4560 mbuf clusters in use (current/peak/max)
10356 Kbytes allocated to network (75% of mb_map in use)
8832 requests for memory denied
1 requests for memory delayed
0 calls to protocol drain routines
[grid] ~ $
Now, the problem is not in the fact that this occurs, and
tuning the kernel parameters is not what I'm interested in,
since I don't need a larger pool.
What I can't seem to figure out is how to flush out the
"stale" mbufs/clusters. I can close down all network
interfaces, and kill/restart most of the processes that I
presume use up the mbufs. At a given point, there can't
possibly be any processes that are hogging the mbuf
clusters. Yet, a while later, this is what the pool
looks like
[grid] ~ $ netstat -m
4305/4944/18240 mbufs in use (current/peak/max):
4305 mbufs allocated to data
4304/4560/4560 mbuf clusters in use (current/peak/max)
10356 Kbytes allocated to network (75% of mb_map in use)
8832 requests for memory denied
1 requests for memory delayed
0 calls to protocol drain routines
[grid] ~ $
A few clusters have been freed. But not much. Now, if
(presumably) no clusters are being used by a process,
should they not be released by the kernel? Alternatively,
how can I enforce this (short of rebooting the machine,
which is *not* the solution I'm looking for)?
Thanks a lot for any input!
Peter
More information about the freebsd-hackers
mailing list