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