答复: 答复: [Samba] The memory maybe leak in samba 4.3.11

Zhangxiaoxu zhang.xiaoxu at h3c.com
Wed May 10 01:52:49 UTC 2017


> What exact version are you using and
Version 4.3.11.

> what code did you add ?
I add some code in the 'queue_msg' function, if the length of the queue is more than 100, the msg will be droped.
So, it won't to malloc too much more memory for the msg.
The msgs is generated when 'ctdbd_migrate', I don’t whether it can be droped.
The messages may be too much, or the sokcet maybe too busy.

Now my application scene is:
There are 3 samba server nodes, 3 clients connect to different servers, every client write 64k to 30 files every 40ms.
If open the current folder with windows explorer in a client, the RES with top command of smbd in that server will grow up very very quickly.

top -d 1 -p 2708752 -b | grep smbd

2708752 nobody    20   0  701928 299184  18616 R 107.8  0.3   1:34.64 smbd
2708752 nobody    20   0  701928 299184  18616 R 112.9  0.3   1:35.77 smbd
2708752 nobody    20   0  701928 299184  18616 R  92.9  0.3   1:36.70 smbd
2708752 nobody    20   0  701928 299184  18616 R 101.8  0.3   1:37.72 smbd
2708752 nobody    20   0  701928 299184  18616 D  18.0  0.3   1:37.90 smbd
2708752 nobody    20   0  701928 299184  18616 D   0.0  0.3   1:37.90 smbd
2708752 nobody    20   0  701928 299184  18616 D   0.0  0.3   1:37.90 smbd
2708752 root      20   0  703336 300528  18616 R  35.0  0.3   1:38.25 smbd
2708752 nobody    20   0  707052 304196  18684 D  20.0  0.3   1:38.45 smbd
2708752 nobody    20   0  707052 304196  18684 D   0.0  0.3   1:38.45 smbd
2708752 nobody    20   0  707052 304196  18684 D   0.0  0.3   1:38.45 smbd
2708752 nobody    20   0  707052 304196  18684 D   0.0  0.3   1:38.45 smbd
2708752 nobody    20   0  720364 317564  18684 R  46.9  0.3   1:38.92 smbd
2708752 nobody    20   0  723360 320564  18564 R  87.9  0.3   1:39.80 smbd
2708752 nobody    20   0  724716 321916  18564 R  96.9  0.3   1:40.77 smbd
2708752 nobody    20   0  724716 321916  18564 R 112.8  0.3   1:41.90 smbd
2708752 nobody    20   0  724716 321916  18564 R  93.9  0.3   1:42.84 smbd
2708752 nobody    20   0  724716 321916  18564 R 100.8  0.3   1:43.85 smbd
2708752 nobody    20   0  724716 321916  18564 D  26.0  0.3   1:44.11 smbd
2708752 nobody    20   0  724716 321916  18564 D   0.0  0.3   1:44.11 smbd
2708752 nobody    20   0  724716 321916  18564 D   0.0  0.3   1:44.11 smbd
2708752 root      20   0  725484 322624  18564 R  17.0  0.3   1:44.28 smbd
2708752 nobody    20   0  734464 331480  18568 D  71.9  0.3   1:45.00 smbd
2708752 nobody    20   0  735456 332660  18568 R  90.9  0.3   1:45.91 smbd
2708752 nobody    20   0  736932 334140  18568 R 106.8  0.3   1:46.98 smbd
2708752 nobody    20   0  738496 335624  18568 D  48.0  0.3   1:47.46 smbd
2708752 nobody    20   0  738496 335624  18568 D   0.0  0.3   1:47.46 smbd
2708752 nobody    20   0  745548 342752  18568 R  68.9  0.3   1:48.15 smbd
2708752 nobody    20   0  747048 344120  18568 R 100.9  0.3   1:49.16 smbd
2708752 nobody    20   0  749148 346184  18568 D  52.9  0.4   1:49.69 smbd
2708752 nobody    20   0  749148 346184  18568 D   0.0  0.4   1:49.69 smbd
2708752 nobody    20   0  755772 352980  18568 R  74.9  0.4   1:50.44 smbd
2708752 nobody    20   0  756632 353840  18568 R 108.8  0.4   1:51.53 smbd

-----邮件原件-----
发件人: Jeremy Allison [mailto:jra at samba.org]
发送时间: 2017年5月10日 2:14
收件人: zhangxiaoxu 13123 (RD)
抄送: 'L.P.H. van Belle'; samba at lists.samba.org; 'samba-technical at lists.samba.org'
主题: Re: 答复: [Samba] The memory maybe leak in samba 4.3.11

On Tue, May 09, 2017 at 02:59:51AM +0000, Zhangxiaoxu via samba-technical wrote:
> Hi,
> Thanks a lot.
>
> Use the valgrind, we found the stack of the malloc as below, so, maybe it is not memory leak.
>     ==2796353== 36,334,440 bytes in 100,929 blocks are still reachable in loss record 774 of 774
>     ==2796353==    at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
>     ==2796353==    by 0x953B88F: ??? (in /usr/lib/x86_64-linux-gnu/samba/libmessages-dgm.so.0)
>     ==2796353==    by 0x953BCA0: ??? (in /usr/lib/x86_64-linux-gnu/samba/libmessages-dgm.so.0)
>     ==2796353==    by 0x953C342: unix_msg_send (in /usr/lib/x86_64-linux-gnu/samba/libmessages-dgm.so.0)
>     ==2796353==    by 0x953E3B6: messaging_dgm_send (in /usr/lib/x86_64-linux-gnu/samba/libmessages-dgm.so.0)
>     ==2796353==    by 0x71732FF: messaging_send_iov_from (in /usr/lib/x86_64-linux-gnu/libsmbconf.so.0)
>     ==2796353==    by 0x716E1BA: ??? (in /usr/lib/x86_64-linux-gnu/libsmbconf.so.0)
>     ==2796353==    by 0x716E869: ??? (in /usr/lib/x86_64-linux-gnu/libsmbconf.so.0)
>     ==2796353==    by 0x716EA91: ??? (in /usr/lib/x86_64-linux-gnu/libsmbconf.so.0)
>     ==2796353==    by 0x7171207: ctdbd_migrate (in /usr/lib/x86_64-linux-gnu/libsmbconf.so.0)
>     ==2796353==    by 0x716BD6E: ??? (in /usr/lib/x86_64-linux-gnu/libsmbconf.so.0)
>         ==2796353==    by 0xAE6692F: ??? (in /usr/lib/x86_64-linux-gnu/samba/libdbwrap.so.0)
>
> Ifound the sendmsg is always failed because erron=EINTR, but smbd also need to malloc for the new msgs, so the res of the smbd grows up quickly.
>
> I add some code in unix_dgram_send_job, just send 10 times if sendmsg faild with EINTR, the res will not grows up anymore.
> Another, keep the max queue length to 100 also work well.
>
> I don’t know whether it is suitable for the process, also, I want to know why sendmsg return EINTR.

EINTR always means a signal was received and interrupted the send.

You're using 4.3.x yes ? In that branch:

static void unix_dgram_send_job(void *private_data) {
        struct unix_dgram_msg *dmsg = private_data;

        do {
                struct msghdr_buf *hdr = unix_dgram_msghdr(dmsg);
                struct msghdr *msg = msghdr_buf_msghdr(hdr);
                dmsg->sent = sendmsg(dmsg->sock, msg, 0);
        } while ((dmsg->sent == -1) && (errno == EINTR));

        if (dmsg->sent == -1) {
                dmsg->sys_errno = errno;
        }
}

we already loop on EINTR. What exact version are you using and what code did you add ?
-------------------------------------------------------------------------------------------------------------------------------------
本邮件及其附件含有杭州华三通信技术有限公司的保密信息,仅限于发送给上面地址中列出
的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、
或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本
邮件!
This e-mail and its attachments contain confidential information from H3C, which is
intended only for the person or entity whose address is listed above. Any use of the
information contained herein in any way (including, but not limited to, total or partial
disclosure, reproduction, or dissemination) by persons other than the intended
recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender
by phone or email immediately and delete it!


More information about the samba-technical mailing list