ISC DHCPD内存泄漏解决scheme和/或解决方法

背景:
我最近已经负责在Debian(Lenny)Unix服务器上安装ISC DHCPD(4.2.5-P1)安装程序来查找内存泄漏的根源和/或修复内存泄漏。

我一直在研究这个问题已经一个多星期了,并且已经获得了很多关于这个系统确实在泄漏的信息,但是我还没有find一个实际的答案来解释为什么这个系统是或者如何停止的。

我目前有:

  • 在vgdb模式下使用valgrind来检测内存泄漏并允许对代码进行在线检查
  • 使用valgrind发现了两个可能的泄漏起点
  • CFLAGS=-DDEBUG_MEMORY_LEAKAGE_ON_EXIT编译DHCPD源(这似乎是停止内存泄漏)
  • 运行新编译的DHCPD二进制文件作为dhcpd -6 -d -cf /etc/dhcpd6.conf
  • 使用以下脚本在72小时内以10分钟的间隔拍摄了vsz和rss二进制文件的快照

脚本:

 #!/bin/bash #probably could have used watch while [[ 0 -eq 0 ]]; do ps -eo vsz,rss,command | grep "dhcpd6.conf" | grep -v grep >> memory-usage.txt sleep 600 done 

我对VSZ和RSS做了一点研究。 如果RSS大小保持不变,但VSZ大小增加,则表明存在明显的内存泄漏。 但是,在我的情况下,VSZ和RSS都在增加。 [开始大小第1天:VZS = 8560 RSS = 6292 =>结束大小第3天:VZS = 67168 RSS = 64860]

我还查看了/proc/PID/maps ,看看能否在那里得到任何信息,但是我找不到任何有用的东西。

/ proc / PID /地图信息:

 08048000-081e3000 r-xp 00000000 08:05 119382 /usr/sbin/dhcpd 081e3000-081e8000 rw-p 0019b000 08:05 119382 /usr/sbin/dhcpd 081e8000-08222000 rw-p 081e8000 00:00 0 09fea000-0a11c000 rw-p 09fea000 00:00 0 [heap] b72b7000-b72c1000 r-xp 00000000 08:01 6184 /lib/i686/cmov/libnss_files-2.7.so b72c1000-b72c3000 rw-p 00009000 08:01 6184 /lib/i686/cmov/libnss_files-2.7.so b72c3000-b7673000 rw-p b72c3000 00:00 0 b7673000-b77c8000 r-xp 00000000 08:01 6192 /lib/i686/cmov/libc-2.7.so b77c8000-b77c9000 r--p 00155000 08:01 6192 /lib/i686/cmov/libc-2.7.so b77c9000-b77cb000 rw-p 00156000 08:01 6192 /lib/i686/cmov/libc-2.7.so b77cb000-b77ce000 rw-p b77cb000 00:00 0 b77cf000-b77d0000 rw-p b77cf000 00:00 0 b77d1000-b77d4000 rw-p b77d1000 00:00 0 b77d4000-b77d5000 r-xp b77d4000 00:00 0 [vdso] b77d5000-b77ef000 r-xp 00000000 08:01 2022 /lib/ld-2.7.so b77ef000-b77f1000 rw-p 0001a000 08:01 2022 /lib/ld-2.7.so bfe0d000-bfe30000 rw-p bffdc000 00:00 0 [stack] 

问题(S):
1.我应该如何去debugging这样的内存泄漏?
2. ISC说,解决scheme是经常重置服务器,这不是一个错误。 如果我的客户不想重置他们的服务器有没有中间的地方? (他们想要certificate他们必须通过一个解决scheme。
3.从2013年1月份以来,有没有人遇到与dhcpd有关的泄漏?
4.是否有解决方法或解决方法可用于此问题?

相关链接):
1. https://kb.isc.org/article/AA-00737(ISC报告)
2. https://access.redhat.com/site/solutions/402713 (这个错误报告与我的内存泄漏[OMAPIfunction]的起点相匹配)

如果您需要任何可能有助于解决此问题的其他信息,我准备提供我所能做到的。

同时,我将看看是否可以编译二进制文件并禁用OMAPIfunction。

DHCP 4.3.0a1刚刚发布,所以我会看看这是否改变了任何东西(有没有变化日志中的信息关于漏洞修复,但它并没有伤害尝试)。

谢谢你的时间。

作为一个解决方法,你可能会考虑在像runit这样的进程pipe理器下运行带有内存限制的dhcpd。

希望如果dhcpd不能分配内存,那么stream程pipe理器会重新启动它。

或者你可以从cron定期重新启动它 – 它比重新启动整个服务器的侵入性更小。