valgrind a background worker

2023-02-10 Thread Jon Erdman


Hi,

I've got a background worker that has a slow memory leak in it 
somewhere. How can I get it to start under valgrind to get a memcheck 
output from it?
-- 
Jon Erdman (aka StuckMojo)
 PostgreSQL Zealot




Re: valgrind a background worker

2023-02-10 Thread Jon Erdman

Aha! Thanks Tom! This will be my first time using valgrind, so I was unaware of 
trace-children, and getting it to attach to forked stuff was exactly where I 
thought the difficulty would lie.  

This is great, much appreciated!

I’m suspecting that the leak might be coming from initStringInfo(), as I see a 
palloc() in there and no associated pfree() in my background worker’s code, but 
looking at the elog backend code, it looks like maybe you only have to 
explicitly free buf if you relocate it larger?
--
Jon Erdman

> On Feb 10, 2023, at 9:03 AM, Tom Lane  wrote:
> 
> =?UTF-8?Q?Jon_Erdman?=  writes:
>> I've got a background worker that has a slow memory leak in it 
>> somewhere. How can I get it to start under valgrind to get a memcheck 
>> output from it?
> 
> You have to valgrind the whole cluster AFAIK.  Basically, start
> the postmaster under valgrind with --trace-children=yes.
> For leak tracking you probably also want
> --leak-check=full --track-origins=yes --read-var-info=yes
> 
>regards, tom lane






Re: valgrind a background worker

2023-02-11 Thread Jon Erdman
On 2/10/23 3:05 PM, Tom Lane wrote:
> Jeffrey Walton  writes:
>> On Fri, Feb 10, 2023 at 10:04 AM Tom Lane  wrote:
>>> You have to valgrind the whole cluster AFAIK.  Basically, start
>>> the postmaster under valgrind with --trace-children=yes.
>>> For leak tracking you probably also want
>>> --leak-check=full --track-origins=yes --read-var-info=yes
> 
>> One additional comment... the program in question and PostgreSQL
>> should also be built with -g -O1 per
>> https://valgrind.org/docs/manual/quick-start.html . Otherwise, there's
>> a risk the line information will not be accurate or usable.
> 
> Yeah.  Also, you need to compile Postgres with -DUSE_VALGRIND
> if you want valgrind to have any idea about palloc/pfree.

Thanks much both of you! I'll report back how it goes ;)
--
Jon Erdman (aka StuckMojo)
 PostgreSQL Zealot




Re: valgrind a background worker

2023-03-16 Thread Jon Erdman

On 2/10/23 9:08 PM, Jon Erdman wrote:
> On 2/10/23 3:05 PM, Tom Lane wrote:
>> Jeffrey Walton  writes:
>>> On Fri, Feb 10, 2023 at 10:04 AM Tom Lane  wrote:
>>>> You have to valgrind the whole cluster AFAIK.  Basically, start
>>>> the postmaster under valgrind with --trace-children=yes.
>>>> For leak tracking you probably also want
>>>> --leak-check=full --track-origins=yes --read-var-info=yes
>>
>>> One additional comment... the program in question and PostgreSQL
>>> should also be built with -g -O1 per
>>> https://valgrind.org/docs/manual/quick-start.html . Otherwise, there's
>>> a risk the line information will not be accurate or usable.
>>
>> Yeah.  Also, you need to compile Postgres with -DUSE_VALGRIND
>> if you want valgrind to have any idea about palloc/pfree.
> 
> Thanks much both of you! I'll report back how it goes ;)

FYI folks: once I got the build done properly (valgrind brew wouldn't 
install on OSX) on linux, I was able to find and fix my leaks. They were 
from not calling pfree on StringInfo.data.
-- 
Jon Erdman (aka StuckMojo)
      PostgreSQL Zealot