![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
8.1 grows until it uses about 4 GB, at which point it dies with the following error: ERROR: out of memory DETAIL: Failed on request of size 8224. |
#3
| |||
| |||
|
|
Joe Sunday <sunday (AT) csh (DOT) rit.edu> writes: 8.1 grows until it uses about 4 GB, at which point it dies with the following error: ERROR: out of memory DETAIL: Failed on request of size 8224. This error should result in dumping a list of per-context memory usage into the postmaster log ... could we have a look at that? |
#4
| |||
| |||
|
|
On Tue, Mar 14, 2006 at 03:56:51PM -0500, Tom Lane wrote: This error should result in dumping a list of per-context memory usage into the postmaster log ... could we have a look at that? Here you go: ... ExecutorState: -346079744 total in 476747 blocks; 1498632 free (15 chunks); -347578376 used |
#5
| |||
| |||
|
|
Joe Sunday <sunday (AT) csh (DOT) rit.edu> writes: On Tue, Mar 14, 2006 at 03:56:51PM -0500, Tom Lane wrote: This error should result in dumping a list of per-context memory usage into the postmaster log ... could we have a look at that? Here you go: ... ExecutorState: -346079744 total in 476747 blocks; 1498632 free (15 chunks); -347578376 used Ick, definitely something leaking in the ExecutorState context. I can't guess what though. Do you want to put together a self-contained test case for us to look at, or dig into it with gdb yourself? |
#6
| |||
| |||
|
|
It'll take me a while to come up with a dataset I can distribute that causes it. My first pass at fake random data didn't seem to trigger it, and I can't divulge the real data. I can poke with gdb, is there a guide for what to look for somewhere? |
#7
| |||
| |||
|
|
It's not the easiest sort of problem to debug :-( ... What I'd try is first letting the problem case run for a bit, then stopping it with gdb and dumping out a few Kb of the frontmost memory block in the ExecutorState context. Sometimes, looking at the data |
|
that's being leaked is enough to give you a clue. If not, try setting a breakpoint at AllocSetAlloc and trying to see where the majority of calls are coming from. It'll be tedious ... |
#8
| |||
| |||
|
|
On Tue, Mar 14, 2006 at 11:29:57PM -0500, Tom Lane wrote: What I'd try is first letting the problem case run for a bit, then stopping it with gdb and dumping out a few Kb of the frontmost memory block in the ExecutorState context. Sometimes, looking at the data Can you point me a little more in that direction? I can't figure out how to get a handle to that context. |
#9
| |||
| |||
|
|
Joe Sunday <sunday (AT) csh (DOT) rit.edu> writes: On Tue, Mar 14, 2006 at 11:29:57PM -0500, Tom Lane wrote: What I'd try is first letting the problem case run for a bit, then stopping it with gdb and dumping out a few Kb of the frontmost memory block in the ExecutorState context. Sometimes, looking at the data Can you point me a little more in that direction? I can't figure out how to get a handle to that context. Well, it's nearly hopeless with a non-debug build, which is what you seem to have there :-(. With debug symbols, printing the parameter passed to AllocSetAlloc is easy enough. |
![]() |
| Thread Tools | |
| Display Modes | |
| |