It was about time to re-test up to date Asterisk versions for memory leakage. As these tests take a rather long time, i will update this post when the 1.4 and 1.6 versions have gone through the test.
The test procedure is the same as in my previous test, incoming SIP calls that send a ringing, wait a little and hang up (no call is ever connected, no RTP is flowing).
Since my last test, things have improved a lot! Asterisk does not consume 200m+ right from the start and it does not leak that much any more. However it still leaks a bit. After 32M+ calls i stopped the test.
Memory consumption before the test: virt 513m 16m 5940 S
Memory consumption after the test: virt 712m res 192m 6432 S
After pushing 37M+ calls Asterisk stopped processing calls because it ran out of RTP ports (it was using the default RTP port range from 10000 to 20000). “netstat -l -n -p | grep asterisk -c” shows that 10009 ports are in use by asterisk. Calls fail with:
Memory consumption before the test: 476m 14m 5412 S
Memory consumption after the test: 742m 197m 5868 S
After pushing 10M+ calls Asterisk is processing calls very slowly. The machine has a high load because it is constantly swapping pages to and from disk. Retransmissions start to fail:
[Mar 30 10:58:50] WARNING: chan_sip.c:2070 retrans_pkt: Maximum retries exceeded on transmission a3621613-d54e-122e-43b7-001aa0314ced for seqno 10401673 (Critical Response) — See doc/sip-retransmit.txt.
Memory consumption before the test: 392m 12m 4396 S
Memory consumption after the test: 1472m 358m 1324 S
During the test Asterisk was complaining about “avoiding initial deadlocks” and “avoiding deadlocks” a lot, but it did not deadlock or go into the famous 100% cpu loop. It just works.
After processing 65M+ calls, I decided to stop the test as i could not see an increasing memory consumption. The 1.2 branch of Asterisk keeps its place as my favourite branch (when it comes to stability).
Memory consumption before the test: 276m 11m 3464 S
Memory consumption after the test: 460m 79m 3768 S S