Jun 05 2008

dtrace java method time cost and counter

Category: 技术ssmax @ 10:32:56

昨晚在sun的论坛问了一下,今天既然10几篇回复,真tmd热情。。。

完善了一下那个简单的脚本,应该可以用了。。。

#!/usr/sbin/dtrace -s
#pragma D option quiet

dtrace:::BEGIN
{
 self->index = 0;
 tstart = timestamp;
}

hotspot$1:::method-entry
{
mname = strjoin(strjoin(copyinstr(arg1,arg2),”->”),copyinstr(arg3,arg4));
self->index++;
self->mname[self->index] = mname;
self->mtime[self->index] = timestamp;
@count[mname] = count();
}

hotspot$1:::method-return
{
mname = strjoin(strjoin(copyinstr(arg1,arg2),”->”),copyinstr(arg3,arg4));
mindex = (self->mname[self->index] == mname) ? -1 : 0;
mtime = (mindex == -1) ? self->mtime[self->index] : tstart;

/*
mname = (mindex == -1) ? mname : strjoin(“non-start-“, mname);
printf(“method : %s : start : %d\n”, mname, tstart);
*/

@time[mname] = avg(timestamp – mtime);
self->index += mindex;
}