[nycbug-talk] postgres memory question
nycbug-list at 2xlp.com
Thu Sep 7 14:41:05 EDT 2006
the other day i noticed what might be a memory leak in PG on my
FreeBSD 6.0 REL box ( it could be in Apache/ModPerl/DBI , but some
bad command line tests point to pg. I'm hoping someone here can help
me figure out what is at blame )
someone else running modperl with pg on RHEL posted a problem like
this a few weeks ago, so I think there might be more to it...
anyways, here's the issue:
i start my box up, ONLY running apache/pg ( nothing else is on ), and
I have ~900 MB free. Perfect.
I make some requests, Apache and PG consume memory. Expected.
I restart Apache, it releases memory and the associated pg_client .
PG still holds shared memory. Expected.
I start stressing Apache ( 10k-50k requests )- apache works great.
not visible memory issues. MaxChildRequests keeps size manageble.
I stop apache, it releases memory and the associated pg_client
memory. PG still holds shared memory. Expected.
I stop the postmaster daemon. PG releases the lock on shared memory
( ipcs shows it ). I expect to see 900 MB free. Instead i see 700.
When I noticed this first, I was swapping. The first person who
experienced something like this was swapping like mad as well.
I run this again a few times, I inch closer and closer to 0. Except
its hard to get the free mem down to 0 - it takes a while.
I'm hoping some people here might be able to suggest the following:
a- A pure PG way to max out shared memory in clients, and restart,
so I can tell if this behavior is from PG or Apache/ModPerl. I
*think* its from PG, as start/stop a few pg clients and then stop/
start the daemon i see a decrease in memory.
I was trying to think of some sort of recursive select or
exponential algorithm. I couldn't find anything on google though.
b- A way to better examine free memory. My knowledge is limited to
top / and a little bit of libgtop. I know i was swapping because top
reported it as such. But I've been told that top doesn't always
report truly 'free' memory-- once that hits 0 it looks in buffers/
cached. So maybe the pg memory is there? I dunno.
If anyone has a clue, I'd be appreciative. This isn't an issue as
long as I don't stop/start postgres.
More information about the talk