背景:
我最近已经负责在Debian(Lenny)Unix服务器上安装ISC DHCPD(4.2.5-P1)安装程序来查找内存泄漏的根源和/或修复内存泄漏。
我一直在研究这个问题已经一个多星期了,并且已经获得了很多关于这个系统确实在泄漏的信息,但是我还没有find一个实际的答案来解释为什么这个系统是或者如何停止的。
我目前有:
CFLAGS=-DDEBUG_MEMORY_LEAKAGE_ON_EXIT编译DHCPD源(这似乎是停止内存泄漏) dhcpd -6 -d -cf /etc/dhcpd6.conf 脚本:
#!/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定期重新启动它 – 它比重新启动整个服务器的侵入性更小。