[erlang-questions] Tail recursion and memory leak
Peter Lemenkov
lemenkov@REDACTED
Fri Mar 16 13:04:54 CET 2007
2007/3/16, Christian S <chsu79@REDACTED>:
> You dont need to call lists:append, gen_udp:send will behave as if it
> calls erlang:iolist_to_binary/1. In fact, we call them iolists because
> most io functions behaves this way.
OK, I changed send_message a little:
===========================
send_msg (Fd,Caller,Called,UserName,SessionID,TagTo,TagFrom,Route) ->
ok = gen_udp:send(Fd,"127.0.0.1",5060,
"BYE sip:127.0.0.1:5060 SIP/2.0 \r\n"
"Via: SIP/2.0/UDP 127.0.0.1:3456\r\n"
"From: <" ++ Caller ++ ">;tag=" ++ TagFrom ++ "\r\n"
"To: <" ++ Called ++ ">;tag=" ++ TagTo ++ "\r\n"
"Call-ID: " ++ SessionID ++ "\r\n"
"User-Agent: MyApp\r\n"
"CSeq: 123 BYE\r\n"
"Route: <" ++ Route ++ ">\r\n"
"Content-Length: 0\r\n"
"\r\n").
===========================
Memory is still consumes until the system completely runs out of mem.
According to the top utility:
19705 root 15 0 30924 10m 1852 S 3 0.5 0:00.24 beam
19705 root 15 0 29900 9m 1852 S 0 0.5 0:00.24 beam
19705 root 16 0 46928 22m 1856 S 10 1.1 0:00.53 beam
19705 root 18 0 99.7m 61m 1856 S 98 3.0 0:03.48 beam
19705 root 25 0 150m 125m 1856 S 98 6.3 0:06.41 beam
19705 root 25 0 129m 92m 1856 R 94 4.6 0:09.24 beam
19705 root 25 0 118m 91m 1856 R 93 4.5 0:12.04 beam
19705 root 25 0 129m 106m 1856 R 96 5.3 0:14.92 beam
19705 root 25 0 195m 121m 1856 R 91 6.1 0:17.66 beam
19705 root 25 0 207m 136m 1856 R 91 6.8 0:20.41 beam
19705 root 19 0 176m 133m 1856 S 93 6.7 0:23.21 beam
19705 root 25 0 166m 132m 1856 S 95 6.6 0:26.06 beam
19705 root 19 0 166m 138m 1856 R 93 6.9 0:28.85 beam
19705 root 25 0 172m 147m 1856 R 94 7.3 0:31.69 beam
19705 root 25 0 189m 152m 1856 R 94 7.6 0:34.52 beam
19705 root 21 0 180m 155m 1856 R 93 7.7 0:37.33 beam
19705 root 25 0 398m 300m 1856 R 91 14.9 0:40.08 beam
19705 root 25 0 249m 164m 1856 R 95 8.2 0:42.95 beam
19705 root 25 0 257m 163m 1856 R 95 8.1 0:45.81 beam
19705 root 25 0 297m 201m 1856 R 96 10.0 0:48.69 beam
19705 root 25 0 242m 174m 1856 R 93 8.7 0:51.49 beam
19705 root 25 0 248m 175m 1856 R 92 8.7 0:54.27 beam
19705 root 25 0 280m 208m 1856 R 94 10.4 0:57.09 beam
19705 root 25 0 263m 199m 1856 R 94 9.9 0:59.91 beam
19705 root 25 0 242m 191m 1856 R 95 9.5 1:02.76 beam
19705 root 25 0 233m 193m 1856 R 94 9.6 1:05.59 beam
19705 root 25 0 237m 197m 1856 R 94 9.8 1:08.42 beam
19705 root 25 0 246m 208m 1856 R 95 10.4 1:11.27 beam
19705 root 25 0 249m 215m 1856 R 100 10.7 1:14.28 beam
19705 root 25 0 240m 213m 1856 R 99 10.6 1:17.24 beam
19705 root 25 0 463m 402m 1856 R 99 20.0 1:20.22 beam
19705 root 25 0 265m 217m 1856 R 99 10.8 1:23.20 beam
19705 root 25 0 266m 226m 1856 R 100 11.3 1:26.19 beam
19705 root 25 0 266m 235m 1856 R 100 11.7 1:29.18 beam
19705 root 25 0 266m 244m 1856 R 100 12.2 1:32.18 beam
19705 root 25 0 373m 225m 1856 R 99 11.2 1:35.16 beam
19705 root 16 0 372m 233m 1856 R 95 11.6 1:38.02 beam
19705 root 17 0 373m 241m 1856 R 98 12.0 1:40.96 beam
19705 root 21 0 373m 249m 1856 S 98 12.4 1:43.90 beam
19705 root 25 0 373m 236m 1856 R 97 11.8 1:46.81 beam
19705 root 25 0 373m 245m 1856 R 96 12.2 1:49.70 beam
19705 root 25 0 435m 289m 1856 R 97 14.4 1:52.62 beam
19705 root 25 0 349m 247m 1856 R 97 12.3 1:55.55 beam
19705 root 25 0 381m 270m 1856 R 97 13.4 1:58.47 beam
19705 root 25 0 354m 252m 1856 R 97 12.6 2:01.38 beam
19705 root 25 0 354m 260m 1856 R 96 13.0 2:04.26 beam
19705 root 25 0 343m 257m 1856 R 97 12.8 2:07.17 beam
================
and so on.
On the other hand, if I try to write simple string (w/o concatenation)
everything looks fine.
--
With best regards!
More information about the erlang-questions
mailing list