> Hi
> I have a Dtrace script ( attached ) which examines
> memory usage, using
> fbt:genunix:anon_resvmem:entry & return
> Seems to work well, tested with a small app that
> malloced < 65 K,
> malloced 200M and mmapeed a 16M file and it appeared
> to get things correct.
But is it tested with calls to free()?
> Basically I am looking at an app that seems to wander
> off the
> reservation in terms of memory usage, so wanted to
> rule out any bugs in the script.
AFAICT ::anon_unresvmem:entry/self->size > 0/ would never fire because
self->size is only non-zero during calls to anon_resvmem. That''s
probably why there seems to be a memory leak.
> is there a way to get the stack of the calling app at the point in
> time of the anon_resvmem:entry & return.
ustack();
Other thoughts:
Most of those self-> variables (uid, pid, etc) seem unnecessary (though
harmless) because the values are just as easy to figure out from the :::return
as from the :::entry
Out of curiosity, why the test for non-NULL pr_psargs? Should unresvmem test for
it as well?
It seems like you''d want sth like this:
fbt:genunix:anon_resvmem:entry /arg1 != 0/
{ self->size = arg0; self->args = (char*) curpsinfo->pr_psargs; }
fbt:genunix:anon_resvmem:return /self->args != 0 && arg1 != 0/
{ printf(...); total[pid] += self->size; self->args = 0; }
fbt:genunix:anon_unresvmem:entry
{ self->size = arg0; self->args = (char*) curpsinfo->pr_psargs; }
fbt:genunix:anon_unresvmem:return /self->args != 0/
{ printf(...); total[pid] -= self->size; self->args = 0; }
Regards,
Ryan
--
This message posted from opensolaris.org