lsyncd导致内存泄漏

发布时间 2023-12-19 17:39:36作者: 热气球!

参考文档

不释放内存,可能存在内存泄漏 ·期刊 #623 ·lsyncd/lsyncd (github.com)

Lsyncd 导致内存泄漏。·期刊 #671 ·lsyncd/lsyncd (github.com)

背景介绍

Lsyncd - 热气球! - 博客园 (cnblogs.com)这篇文章中记录了为何使用lsyncd以及如何使用的。

近期通过top命令发现lsyncd这个程序的内存占用比较高

查看了一下lsyncd进程的内存占用具体值

[root@ydy36 ~]# cat /proc/19959/status
Name:   lsyncd
Umask:  0022
State:  S (sleeping)
Tgid:   19959
Ngid:   0
Pid:    19959
PPid:   1
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 128
Groups:
VmPeak:   494620 kB
VmSize:   494616 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:    483920 kB
VmRSS:    483736 kB
RssAnon:          482852 kB
RssFile:             884 kB
RssShmem:              0 kB
VmData:   482908 kB
VmStk:       132 kB
VmExe:       172 kB
VmLib:      3156 kB
VmPTE:       988 kB
VmSwap:        0 kB
Threads:        1
SigQ:   0/63455
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 0000000000014003
CapInh: 0000000000000000
CapPrm: 0000001fffffffff
CapEff: 0000001fffffffff
CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
NoNewPrivs:     0
Seccomp:        0
Speculation_Store_Bypass:       thread vulnerable
Cpus_allowed:   ff
Cpus_allowed_list:      0-7
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        13370
nonvoluntary_ctxt_switches:     249197

VmRSS: 483736 kB 代表的是占用的具体值,约等于0.5G。

lsyncd作为一个传输文件的工具应该是占用网络io比较多,怎么会占用0.5G的内存呢? 并且在Lsyncd - 热气球! - 博客园 (cnblogs.com)中曾做过实验,传输过程中有明显增长的只有网络,CPU和内存都没有明显变化。

问题原因

在GitHub Issue中找到了类似的问题:不释放内存,可能存在内存泄漏 ·期刊 #623 ·lsyncd/lsyncd (github.com),其中https://github.com/fabrizio2210 用户十分清晰的记录下了lsyncd内存增长的?。

似乎 lsyncd 会记住它处理的所有文件,而不会将它们从内存中删除。

解决办法

Lsyncd 导致内存泄漏。·期刊 #671 ·lsyncd/lsyncd (github.com)该Issue中记录了已经将此Issue修复,所以新版本应该不会出现内存泄漏的问题。(我并没有进行测试。)

如果你像我一样,已经大规模部署使用并且不确定新版本是否还存在此问题,一个简单的处理方式是定时restart。