1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

使用DTrace解决内存泄露的一个实例

DTrace在查找内存泄露这个令人头疼的问题方面是一个特别好的工具。这不,在前两天的FreeBSD邮件列表里,又利用DTrace解决了内存泄露的一个bug。命令很简单:

# dtrace -n 'dtmalloc::CAM_CCB: {printf("%s", execname); stack();}'

通过stack()就可以看到哪里进行了mallocPatch如下:

diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c
index 85b2ff9..1f7be4f 100644
--- a/sys/cam/cam_periph.c
+++ b/sys/cam/cam_periph.c
@@ -1876,6 +1876,7 @@ cam_periph_devctl_notify(union ccb *ccb)

        if (cgd->ccb_h.status == CAM_REQ_CMP)
            sbuf_bcat(&sb, cgd->serial_num, cgd->serial_num_len);
+       xpt_free_ccb((union ccb *)cgd);
    }
    sbuf_printf(&sb, "\" ");
    sbuf_printf(&sb, "cam_status=\"0x%x\" ", ccb->ccb_h.status);

在其它支持DTrace的系统上,查找内存问题也可以参考上述DTrace命令。

参考资料:
wired memory leak at r298785

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.