Further analysis showed today that some session, transactions and request are never collected from memory. We found a few scenarios when this happens:
1. callId: a461d57243e781f9d634ba85b09406a8
sipSessionId: 27860644_8ade2a41_340019083127318:a461d57243e781f9...@192.168.77.31:340019083127318:si.iskratel.as.conference.SipConferenceService
Scenario:
a) invite is sent from sip servlet (UAC) to sip server
b) 180 ringing is received and dispatched to servlet
c) it seems 200 OK is also received (seen in attached log), but is never dispatched to servlet. Because no ACK is sent, retransmition of 200 OK is done several times
d) servlet wants to terminate the call by creating CANCEL request. But when we try to invoke getB2buaHelper() on newly created request, we get following exception:
java.lang.NullPointerException
at org.mobicents.servlet.sip.message.SipFactoryImpl$NamesComparator.compare(SipFactoryImpl.java:97)
at org.mobicents.servlet.sip.message.SipFactoryImpl$NamesComparator.compare(SipFactoryImpl.java:93)
at java.util.TreeMap.getEntryUsingComparator(TreeMap.java:351)
at java.util.TreeMap.getEntry(TreeMap.java:322)
at java.util.TreeMap.containsKey(TreeMap.java:209)
at java.util.TreeSet.contains(TreeSet.java:217)
at org.mobicents.servlet.sip.message.SipServletRequestImpl.getB2buaHelper(SipServletRequestImpl.java:372)
...
e) After 5 minutes sipSession destroyed callback is invoked, but session is never cleaned from memory. Profiler shows that session's isValid atribute is set to false.
2. callId: bab438d148142144a00aca42f1547756
sipSessionId: 63926527_8ade2a41_340019083127318:bab438d148142144...@192.168.77.31:340019083127318:si.iskratel.as.conference.SipConferenceService
Scenario:
a) invite is sent from sip servlet (UAC) to sip server
b) 183 Session Progress is received and dispatched to servlet
c) Another 183 Session Progress is received and dispatched to servlet
d) Third 183 Session Progress is received and dispatched to servlet
e) it seems 200 OK is also received (seen in attached log), but is never dispatched to servlet.
f) Servlet tryes to send CANCEL request, but IllegalStateException happens, so BYE is sent instead.
g) 200 OK for BYE is received and dispatched to servlet.
h) After 5 minutes sipSession destroyed callback is invoked, but session is never cleaned from memory. Profiler shows that session's isValid atribute is set to false.
3. callId: 91d3df466ce1239f14bf008437a13c0f
sipSessionId: 70446410_8ade2a41_340019083127318:91d3df466ce1239f...@192.168.77.31:340019083127318:si.iskratel.as.conference.SipConferenceService
This one very strange as everything seems to work as expected, but after all, session is not cleaned from memory.
Scenario:
a) invite is sent from sip servlet (UAC) to sip server
b) 180 ringing is received and dispatched to servlet
c) 200 OK is received and dispatched to servlet
d) ACK is sent after 2 seconds, meanwhile 200 OK retransmittions (seen in attached log) happen.
e) servlet sends BYE
f) 200 OK for BYE is received and dispatched to servlet.
g) After 5 seconds session is invalidated and destroyed, but it is never cleaned from memory. Profiler shows that session's isValid atribute is set to false.
4. callId: 5422c1f82797ce649c867d7a1225729c
sipSessionID: 51692209_8ade2a41_340019083127318:5422c1f82797ce64...@192.168.77.31:340019083127318:si.iskratel.as.conference.SipConferenceService
Scenario:
a) invite is sent from sip servlet (UAC) to sip server
b) CANCEL request is sent from sip servlet (UAC) to sip server
c) 408 Request timeout is dispatched to servlet after 32 seconds after CANCEL request
d) Servlet invalidates sipSession, but it is never cleaned from memory. Profiler shows that session's isValid atribute is set to false.
5. callId: dd63deb4f86b166ba724920088e6798f
sipSessionId: 34992473_8ade2a41_340019083127318:dd63deb4f86b166b...@192.168.77.31:340019083127318:si.iskratel.as.conference.SipConferenceService
Scenario:
a) invite is sent from sip servlet (UAC) to sip server
b) 180 ringing is received and dispatched to servlet
c) 200 OK is received and dispatched to servlet
d) ACK is sent
e) servlet sends BYE
f) 408 Request timeout is dispatched to servlet after 32 seconds after BYE request
g) Servlet invalidates sipSession, but it is never cleaned from memory. Profiler shows that session's isValid atribute is set to false.
If you need any additional info, profiler snapshot is saved, so information is available.