ISC DHCP 3.1.1rc1 is now available!
sthaug at nethelp.no
sthaug at nethelp.no
Sun Mar 30 18:26:57 UTC 2008
> > So which defines are recommended? DEBUG_MEMORY_LEAKAGE? DEBUG_RC_HISTORY?
> > DEBUG_REFCNT_DMALLOC_FREE? DEBUG_MEMORY_LEAKAGE_ON_EXIT?
>
> i'd start with debug_memory_leakage and on_exit.
>
> rc_history and refcnt are spammy and probably really only the next
> step for someone who knows vaguely what they're looking for ("a leak
> in objects of type x").
OK, I did ./configure --copts "-DDEBUG_MEMORY_LEAKAGE_ON_EXIT -DDEBUG_MEMORY_LEAKAGE"
and found I needed to change the code a bit to get it to compile at all:
--- server/salloc.c.orig 2006-02-25 00:16:32.000000000 +0100
+++ server/salloc.c 2008-03-30 16:08:53.000000000 +0200
@@ -66,7 +66,9 @@
if (!c) {
log_info ("lease %s refcnt %d",
piaddr (n [i].ip_addr), n [i].refcnt);
+#if 0
dump_rc_history (&n [i]);
+#endif
}
}
}
--- omapip/alloc.c.orig 2006-02-25 00:16:30.000000000 +0100
+++ omapip/alloc.c 2008-03-30 12:59:57.000000000 +0200
@@ -507,7 +507,9 @@
for (i = 0; i < ccur; i++) {
printf ("%d\t%s:%d\t%d\n", i,
cp [i].dp -> file, cp [i].dp -> line, cp [i].count);
+#if 0
dump_rc_history (cp [i].dp + 1);
+#endif
}
}
#endif /* DEBUG_MEMORY_LEAKAGE || DEBUG_MALLOC_POOL */
--- server/mdb.c.orig 2008-01-22 20:02:51.000000000 +0100
+++ server/mdb.c 2008-03-30 16:05:03.000000000 +0200
@@ -2440,13 +2440,13 @@
host_free_hash_table (&host_uid_hash, MDL);
host_uid_hash = 0;
if (lease_uid_hash)
- lease_free_hash_table (&lease_uid_hash, MDL);
+ lease_id_free_hash_table (&lease_uid_hash, MDL);
lease_uid_hash = 0;
if (lease_ip_addr_hash)
- lease_free_hash_table (&lease_ip_addr_hash, MDL);
+ lease_ip_free_hash_table (&lease_ip_addr_hash, MDL);
lease_ip_addr_hash = 0;
if (lease_hw_addr_hash)
- lease_free_hash_table (&lease_hw_addr_hash, MDL);
+ lease_id_free_hash_table (&lease_hw_addr_hash, MDL);
lease_hw_addr_hash = 0;
if (host_name_hash)
host_free_hash_table (&host_name_hash, MDL);
@@ -2644,8 +2644,11 @@
char *s;
} foo;
if (universes [i]) {
- if (universes [i] -> hash)
- option_free_hash_table (&universes [i] -> hash,
+ if (universes [i] -> name_hash)
+ option_name_free_hash_table (&universes [i] -> name_hash,
+ MDL);
+ if (universes [i] -> code_hash)
+ option_code_free_hash_table (&universes [i] -> code_hash,
MDL);
#if 0
if (universes [i] -> name > (char *)&end) {
Hopefully these are reasonable changes - however, since I haven't really
dug into the code in sufficient detail ("you're in a maze of twisty
little hash tables, all different"), I can't make any guarantees.
On my first run through with debug_memory_leakage and on_exit, I used
omshell to shut the server down *before* it had started showing obvious
signs of memory leaks. I got the following in log:
Mar 30 18:34:07 slam2 dhcpd: failover peer dhcp1-dhcp2: peer moves from normal to partner-down
Mar 30 18:34:08 slam2 dhcpd: failover peer dhcp1-dhcp2: I move from shutdown to recover
<around 40 mins with dhcpd using 90% of the CPU>
Mar 30 19:13:30 slam2 dhcpd: lease 195.139.136.2 refcnt 1
Mar 30 19:13:52 slam2 dhcpd: lease 195.139.120.2 refcnt 1
Mar 30 19:14:14 slam2 dhcpd: lease 193.71.112.2 refcnt 1
Mar 30 19:14:35 slam2 dhcpd: lease 193.71.104.2 refcnt 1
Mar 30 19:14:56 slam2 dhcpd: lease 193.69.192.2 refcnt 1
Mar 30 19:15:16 slam2 dhcpd: lease 81.191.40.2 refcnt 1
Mar 30 19:15:53 slam2 dhcpd: lease 81.191.0.2 refcnt 1
Mar 30 19:16:29 slam2 dhcpd: lease 193.91.160.2 refcnt 1
Mar 30 19:17:02 slam2 dhcpd: lease 81.191.192.2 refcnt 1
Mar 30 19:17:18 slam2 dhcpd: lease 195.0.200.2 refcnt 1
Mar 30 19:17:48 slam2 dhcpd: lease 81.191.144.2 refcnt 1
Mar 30 19:18:15 slam2 dhcpd: lease 193.90.160.2 refcnt 1
Mar 30 19:18:40 slam2 dhcpd: lease 193.90.48.2 refcnt 1
Mar 30 19:18:52 slam2 dhcpd: lease 193.71.200.2 refcnt 1
Mar 30 19:19:04 slam2 dhcpd: lease 193.71.160.2 refcnt 1
Mar 30 19:19:25 slam2 dhcpd: lease 193.91.128.2 refcnt 1
Mar 30 19:19:42 slam2 dhcpd: lease 81.191.112.2 refcnt 1
Mar 30 19:19:58 slam2 dhcpd: lease 81.191.208.2 refcnt 1
Mar 30 19:20:06 slam2 dhcpd: lease 62.101.248.2 refcnt 1
Mar 30 19:20:18 slam2 dhcpd: lease 81.191.48.2 refcnt 1
Mar 30 19:20:24 slam2 dhcpd: lease 195.0.168.2 refcnt 1
Mar 30 19:20:34 slam2 dhcpd: lease 193.75.48.2 refcnt 1
Mar 30 19:20:38 slam2 dhcpd: lease 81.191.72.2 refcnt 1
Mar 30 19:20:41 slam2 dhcpd: lease 81.191.160.2 refcnt 1
Mar 30 19:20:46 slam2 dhcpd: lease 81.191.176.2 refcnt 1
Mar 30 19:20:49 slam2 dhcpd: lease 81.191.80.2 refcnt 1
Mar 30 19:20:50 slam2 dhcpd: lease 81.191.16.2 refcnt 1
Mar 30 19:20:50 slam2 dhcpd: lease hunk 925e028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 91f5028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 918d028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 9124028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 90bb028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 9053028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8f81028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8eb1028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8de0028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8d78028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8ca7028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8bd6028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8b04028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8a9c028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8a34028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8963028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8892028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 87c1028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8759028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 8688028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 861f028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 854d028 leases 253 free 252
Mar 30 19:20:50 slam2 dhcpd: lease hunk 84e5028 leases 253 free 252
Mar 30 19:20:51 slam2 dhcpd: lease hunk 847c028 leases 253 free 252
Mar 30 19:20:51 slam2 dhcpd: lease hunk 83ac028 leases 253 free 252
Mar 30 19:20:51 slam2 dhcpd: lease hunk 82dc028 leases 253 free 252
Mar 30 19:20:51 slam2 dhcpd: lease hunk 820b028 leases 253 free 252
Mar 30 19:21:18 slam2 dhcpd: hashbucket 80d8028 hash_buckets 127 free 125
<dhcpd process exited>
So what do these log entries indicate?
I'm now going to let the server run until the memory leak starts, and then
shut the server down and see what I get in the log.
Steinar Haug, Nethelp consulting, sthaug at nethelp.no
More information about the dhcp-users
mailing list