[asterisk-bugs] [JIRA] (ASTERISK-27140) Memory leak in sorcery.c – pjsip subcribtions not expired

Jacek Konieczny (JIRA) noreply at issues.asterisk.org
Tue Jul 18 06:44:58 CDT 2017


Jacek Konieczny created ASTERISK-27140:
------------------------------------------

             Summary: Memory leak in sorcery.c – pjsip subcribtions not expired
                 Key: ASTERISK-27140
                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-27140
             Project: Asterisk
          Issue Type: Bug
      Security Level: None
    Affects Versions: 14.6.0, 13.15.1
         Environment: Linux 4.4.66, 32-bit asterisk
Yealink T41, T23, T27  and Snom 710 SIP phones
            Reporter: Jacek Konieczny


We have experienced quite a serious memory leak on a system running Asterisk 13.14.1. Asterisk process would grow until it fails due to OOM problems.

We have enabled memory debugging code in Asterisk, which pointed us to allocation in the 'sorcery.c' file. Here are some of regular measurements:

{noformat}
Jul 18 08:29:05  12293024 bytes in       1871 allocations in file sorcery.c
Jul 18 08:30:05  12427300 bytes in       1879 allocations in file sorcery.c
Jul 18 08:31:05  12494666 bytes in       1885 allocations in file sorcery.c
Jul 18 08:32:05  12662739 bytes in       1897 allocations in file sorcery.c
[...]
Jul 18 13:08:05  53012221 bytes in       4297 allocations in file sorcery.c
Jul 18 13:09:05  53146497 bytes in       4305 allocations in file sorcery.c
Jul 18 13:10:05  53246976 bytes in       4309 allocations in file sorcery.c
{noformat}

Further investigation lead us to the abnormal count of pjsip subscriptions:
{noformat}
CLI> pjsip show subscriptions inbound
Endpoint: <Endpoint/Caller-ID.............................................>
Resource: <Resource/Event.................................................>
  Expiry: <Expiry>  <Call-id..............................................>
===========================================================================

Endpoint: pauu9/"phone:pauu9" <phone_pauu9>
Resource: 603/dialog
  Expiry:        0  0_3532174332 at X.X.X.X

Endpoint: 8wmgf/"phone:8wmgf" <phone_8wmgf>
Resource: 603/dialog
  Expiry:        0  0_1381764142 at X.X.X.X
[...]
Endpoint: waqiy/"phone:waqiy" <phone_waqiy>
Resource: 400/dialog
  Expiry:     1748  0_710460239 at X.X.X.X

1603 active subscriptions
{noformat}

We have seen even over 10000 active subscriptions there. Most of them with 'Expiry: 0' (similar to ASTERISK-26821).

The system would also occasionally crash due to ASTERISK-27057, so I hoped Asterisk upgrade will fix the problem.

Unfortunately, we are able to reproduce the memory/subscription leak on Asterisk 14.6.0 in our test system. It is not that dramatic there, though, as the system load is much lower.

{noformat}
qemu*CLI> pjsip show subscriptions inbound
Endpoint: <Endpoint/Caller-ID.............................................>
Resource: <Resource/Event.................................................>
  Expiry: <Expiry>  <Call-id..............................................>
===========================================================================

Endpoint: vfd5v/"phone:vfd5v" <phone_vfd5v>
Resource: 313/dialog
  Expiry:        0  0_3957488405 at 192.168.1.141

Endpoint: rcumw/"phone:rcumw" <phone_rcumw>
Resource: rcumw/message-summary
  Expiry:     2228  0_3402140230 at 192.168.1.100

Endpoint: rcumw/"phone:rcumw" <phone_rcumw>
Resource: 555/dialog
  Expiry:        0  0_2653972870 at 192.168.1.100

Endpoint: rcumw/"phone:rcumw" <phone_rcumw>
Resource: 327/dialog
  Expiry:        0  0_3105449958 at 192.168.1.100

Endpoint: rcumw/"phone:rcumw" <phone_rcumw>
Resource: 307/dialog
  Expiry:        0  0_3959991489 at 192.168.1.100

Endpoint: rcumw/"phone:rcumw" <phone_rcumw>
Resource: 313/dialog
  Expiry:        0  0_3788627546 at 192.168.1.100

Endpoint: rcumw/"phone:rcumw" <phone_rcumw>
Resource: 400/dialog
  Expiry:        0  0_2717320225 at 192.168.1.100

[...]

Endpoint: rcumw/"phone:rcumw" <phone_rcumw>
Resource: 400/dialog
  Expiry:     1786  0_1665913924 at 192.168.1.100

185 active subscriptions
{noformat}

This test system has only 20 endpoints and only couple of them use SIP subscription to couple of others. Most entries on the list are duplicates, with 'Expiry: 0'.

{{sorcery.c}} allocations were also increasing:
{noformat}
   2569589 bytes in        857 allocations in file sorcery.c
[...]
   5994851 bytes in       1061 allocations in file sorcery.c
{noformat}

Step to reproduce:
* Set up Asterisk PBX with a few SIP phones
* Configure BLF on the sip phones to SIP-subscribe other endpoints
* Have some of the subscribed extensions unavailable (assigned SIP phones offline)
* wait until first entries are to be expired (Expiry: 0  in 'pjsip show endpoints inbound')

Expected results: expired entries disappear after some time.
Actual result: expired entries stay in the 'pjsip show endpoints inbound'

Note: we have reproduced it only in our specific Asterisk configuration, as we have no means to quickly reproduce it in and isolated simple Asterisk setup (our test systems are designed to test our product, not Asterisk alone).

I guess the way we use hints in asterisk dial plan may be related to the problem, so here is a sample:

{noformat}
[ext-local]
exten => 303,hint,${HINT(1581dca5-e34d-371c-aed0-09002af06d06 at users)}
exten => 313,hint,${HINT(56d1d500-09dd-34ec-b40a-d65c065a186e at users)}
exten => 330,hint,${HINT(a4f5591b-78f2-3d9c-980e-4d6fa097b924 at users)}
exten => 300,hint,PJSIP/ooz9t
...

[users]
exten => 56d1d500-09dd-34ec-b40a-d65c065a186e,hint,PJSIP/jfikn&custom:313,CustomPresence:313
exten => 1581dca5-e34d-371c-aed0-09002af06d06,hint,PJSIP/rcumw&custom:401,CustomPresence:401
exten => c3d62505-11dc-36db-9aa3-508693b6a3c0,hint,PJSIP/fgd6r,CustomPresence:327
...
{noformat}

We may attempt to gather more debugging information next week, if needed,



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list