[squid-users] leaking memory in squid 3.4.8 and 3.4.7.

Steve Hill steve at opendium.com
Tue Sep 30 14:59:24 UTC 2014


On 30.09.14 15:13, Amos Jeffries wrote:

> IIRC the valgrind report is strangely at the end of mgr:info rather
> than mgr:mem.

In that case the wiki is wrong. :)
Anyway, it doesn't show up on either of them for me so I guess you might 
be right that it isn't "real" leaked memory.  (I still thought I'd see 
some indication that it was invoking the valgrind report though, even if 
it contained no data)

> With one small exception all the reports of memory "leaks" in
> 3.2/3.3/3.4 series are in fact memory over-allocations. The difference
> is that over-allocated memory is still referenced by some part of
> Squid, so it *does not* show up in a leak finder like valgrind.

Do you have any advice for finding out what memory is still referenced 
in large amounts?  Since this is unaccounted memory, it presumably 
doesn't appear in mgr:mem (at least, I can't see anything obvious in there)?

I'm trying to figure out if there's a way of convincing valgrind to dump 
info about all the currently allocated memory while the program is still 
running - there would be a lot of legitimate stuff in the report, but 
hopefully a few hundred MB of memory that shouldn't be there would stick 
out like a sore thumb.

> If you are using a 64-bit OS then the unaccounted numbers there are
> bogus. They are based on mallinfo() lookup results which suffer from
> 32-bit wrap issues. Use the OS command line to get a memory report
> from top or similar instead.

In this case I don't believe the data is bogus.  I have 8 workers, which 
top shows as:
26249 squid     20   0  871m 782m 5348 S  0.7 10.0   8:44.81 squid
26245 squid     20   0  732m 644m 5344 S  0.3  8.3   8:00.77 squid
26244 squid     20   0  706m 617m 5348 S  1.0  7.9   7:42.29 squid
26250 squid     20   0  699m 613m 5348 S  3.6  7.9   4:43.49 squid
26246 squid     20   0  699m 612m 5348 S  2.3  7.9   6:12.78 squid
26251 squid     20   0  662m 576m 5348 S  0.7  7.4   5:45.11 squid
26248 squid     20   0  649m 564m 5348 S  2.3  7.2   9:22.91 squid
26247 squid     20   0  603m 518m 5348 S  1.3  6.6   4:45.47 squid

Adding the sizes in the "virt" column gives me 5621MB.  The combined RSS 
is 4926MB.  Process 26250 has just 2MB in swap, the rest have no swap at 
all.  I guess the difference between the RSS and Virt totals can 
probably be almost entirely accounted for by the executables.

mallinfo() says there is about 4897MB in the arena - close enough to sum 
of the RSS that I'm inclined to believe it.  Since no one process 
exceeds 2GB, mallinfo() is probably trustworthy in this case.

The accounted for memory is 440MB - potentially higher than I would 
expect for a Squid with caching disabled, but certainly low enough to 
not be an immediate concern.  But that gives us about 4.4GB of memory 
unaccounted for (by subtracting 440MB from the sum of the RSS as shown 
by top).

4.4GB of unaccounted memory after running for just 6 hours is a 
significant amount, and if left to their own devices Squid continues to 
eat all the memory, leaving the machine thrashing swap.

I count 531 sockets in netstat, so my guess is that it isn't just data 
associated with some open sockets:
netstat -apn|egrep '26249|26245|26244|26250|26246|26251|26248|26247' -c
531


-- 
  - Steve


More information about the squid-users mailing list