tunning mobicent-jean deruelle
DESCRIPTION
Performance Tuning Mobicents SIP Servlets. JUDCon 2011 presentation by Jean Deruelle and Naoki Nishihara.TRANSCRIPT
![Page 1: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/1.jpg)
![Page 2: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/2.jpg)
Tuning and development with SIP Servlet on Mobicents
Naoki Nishihara OKI Electric Industry Co.,Ltd Jean Deruelle Mobicents Sip Servlets Lead
![Page 3: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/3.jpg)
Agenda
• Introduction • SIP Application behavior • How to tune the JavaVM for SIP Servlet • How to develop SIP Servlet Application
with Frameworks
![Page 4: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/4.jpg)
Introduction
– Mobicents fellow • Member of mobicents core team from March
2011 – Leading mobicents SSF project
• For developing SIP Servlet Application with Spring Framework
– OKI has been involved SIP Servlet development since 2003
![Page 5: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/5.jpg)
About OKI
• Founded – January 1881
• Major Operation – Manufacturing and sales of products,
technologies, software and solutions for telecommunications systems and information systems
![Page 6: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/6.jpg)
Current works
• Support Japanese carrier (They are evaluating the OSS platform)
• Customize MSS for proprietary ex) NOT include internal IP Address in SIP header fields
• Developing customized SIP Load balancer
![Page 7: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/7.jpg)
SIP Servlet Behavior
![Page 8: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/8.jpg)
SIP Servlet Behavior (1)
• To establish one session, some messages are sent and received.
![Page 9: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/9.jpg)
Basic B2BUA sequence UAC UAS MSS
INVITE INVITE
180/INVITE 180/INVITE
200/INVITE 200/INVITE
ACK ACK
BYE BYE
Established Session
200/BYE 200/BYE
• 2 dialogs • 6 transactions • 12 messages
![Page 10: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/10.jpg)
SIP Servlet Behavior (2)
• Many object will be generated in one sequence.
![Page 11: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/11.jpg)
Created instances After 10,000 calls (NOT TERMINATED SESSION)
NameValueList NameValue HostPort Host DuplicateNameValueList MultiValueMapImpl SipURI Authority AddressImpl
gov.nist.core.
gov.nist.javax.sip.
:810,041 :330,015 :310,036 :310,036 :290,049 :290,049 :240,006 :240,006 :210,003
Instance counts
![Page 12: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/12.jpg)
Mobicents SIP Servlet own behavior
• JAIN-SIP, SIP Servlet, JBoss(J2EE)…
About 200 Threads run on MSS (for transport, timer, cluster…)
![Page 13: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/13.jpg)
Other problems related to SIP
• Retransmissions will occur, if response was sent late over 500ms with UDP transport – In normal case, UDP transport will be used.
• If JVM was stopped long time by GC – Call failure will be occurred and error handling
may not work properly. – SIP has many timers, they could not work
properly. • It’s relatively easy to retry with HTTP, but you
would have to start over from scratch to initiate session with SIP
![Page 14: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/14.jpg)
Conclusion • MSS will discard many objects in one session. • When retransmissions of UDP messages occurred,
– Many threads runs at the same time – Many objects are discarded – CPU usage go up – GC will be missed – Full GC will run
Fall in a vicious cycle
![Page 15: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/15.jpg)
How To Tune the Java VM
![Page 16: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/16.jpg)
Plan
• Reduce retransmissions of UDP – Response time less than 200ms – Measure the performance on tuned JVM
• 400call/sec(1440,000BHCA)
• Effective use of multiple CPU – Most of server-machine have multiple CPU
• Reduce pause times by “Stop-The-World”
![Page 17: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/17.jpg)
Test Sequence UAC UAS Mobicnets
INVITE INVITE
180/INVITE 180/INVITE
200/INVITE 200/INVITE
ACK ACK
BYE BYE
Established Session
200/BYE 200/BYE
10sec
30sec
About 16,000 sessions will remain on JVM
![Page 18: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/18.jpg)
Recommended Sun Java VM Options
• -server – -XX:+UseTLAB is enabled.
• -XX:+UseConcMarkSweepGC – CMS GC reduce the “Stop the World”.
• -XX:+CMSIncrementalMode – Enable the incremental mode. You should tune the
below options • -XX:CMSIncrementalDutyCycle=<N> • -XX:CMSIncrementalDutyCycleMin=<N>
![Page 19: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/19.jpg)
Other performance options(1) • -XX:MaxTenuringThreshold=0 -XX:SurvivorRatio=128
– Object that related to SipSessions will NOT be collected in NewGC. This option will make the full NewSize available to every NewGC cycle.
• -XX:+UseParNewGC – Enable a parallel young generation GC. (for multiple cpu machine)
• -XX:CMSInitiatingOccupancyFraction=75 – Set the level at which the collection is started
• -XX:+CMSParallelRemarkEnabled – Reduce remark pause with multi threads
![Page 20: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/20.jpg)
Other performance options (2) • -XX:+UseStringCache
– Enables caching of commonly allocated strings • -XX:+OptimizeStringConcat
– Optimize String concatenation operations where possible • -XX:+UseCompressedStrings
– Use a byte[] for Strings which can be represented as pure ascii
• -XX:+UseCompressedOops – Enables the use of compressed pointers for optimized 64-bit
performance
![Page 21: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/21.jpg)
Data and results
1. Default GC 2. CMS GC without tuning the duty cycle 3. CMS GC with tuning the duty cycle 4. Add parallel NewGC and performance options
Analyze: GC, CPU usage, failed call, succeeded call, Retransmissions, Average response time,…
![Page 22: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/22.jpg)
GC options (1)
-Xms6g -Xmx6g -XX:PermSize=256m -XX:MaxPermSize=256m
![Page 23: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/23.jpg)
Default GC
Over thousands failed calls And retransmissions
“Stop The World” about 8 seconds
Thousands responses took more than 200ms
![Page 24: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/24.jpg)
GC options (2)
-Xms6g -Xmx6g -XX:PermSize=256m -XX:MaxPermSize=256m
-XX:UseConcMarkSweepGC -XX:+CMSIncrementalMode
![Page 25: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/25.jpg)
CMS GC without tuning the duty cycle
0 failed call
GC pause time less than 100ms
CPU usage increased
Decreased time-consuming response
![Page 26: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/26.jpg)
GC options (3)
-XX:UseConcMarkSweepGC -XX:+CMSIncrementalMode
-XX:-CMSIncrementalPacing -XX:CMSIncrementalDutyCycle=100 -XX:CMSIncrementalDutyCycleMin=100
![Page 27: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/27.jpg)
CMS GC with tuning the duty cycle
CPU usage decreased
Retransmissions decreased
GC pause time less than 100ms
Decreased time-consuming response
![Page 28: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/28.jpg)
GC options (4) -XX:-CMSIncrementalPacing -XX:CMSIncrementalDutyCycle=100 -XX:CMSIncrementalDutyCycleMin=100
-XX:+UseStringCache -XX:+OptimizeStringConcat -XX:+UseCompressedStrings -XX:MaxTenuringThreshold=0 -XX:SurvivorRatio=128 -XX:+UseParNewGC -XX:+UseCompressedOops -XX:CMSInitiatingOccupancyFraction=75 -XX:+CMSParallelRemarkEnabled
![Page 29: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/29.jpg)
Add parallel NewGC and performance options
CPU usage decreased
Memory usage decreased
Retransmissions increased
Increased time-consuming response
![Page 30: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/30.jpg)
Results
• Recommended VM options are useful. – Reduce pause times – No failed calls – Reduce retransmissions
• Tuning options of the duty cycle are very useful
• Other performance options are slightly useful
![Page 31: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/31.jpg)
Developing SIP Servlet with frameworks
![Page 32: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/32.jpg)
SIP Servlet Frameworks Mobicents has 2 SIP Servlet Frameworks • SSF (Spring Signaling Framework)
– Based on Spring Framework
• CTF(CDI-Telco-Framework) – CDI Based framework
These frameworks have same concept…
Simplify SipServlets development We want to merge these framework’s functions and support many developers!
![Page 33: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/33.jpg)
Spring Signaling Framework SSF
![Page 34: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/34.jpg)
How to develop SIP Servlet application with SSF
![Page 35: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/35.jpg)
Why using Spring Framework?
• Standard DI Container – Familiar to many Java Developers
• Customizable Context – SSF provide customized Context for SIP Servlet
• Many functionality modules are working on Spring Framework. – You can create the converged application with
Spring Framework modules.
![Page 36: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/36.jpg)
Create SIP Servlet with POJO @Component public class ProxyHandler {
@Autowired ProxyBean proxyBean;
@Autowired CheckRequireBean checkRequire;
@SipServletRequestMapping(methods = { "INVITE", "UPDATE", "MESSAGE", "PUBLISH" }) public void handleRequest(SipServletRequest req) throws Exception { // start checkRequire.handleRequest(req);
if (req.isCommitted()) { return; } proxyBean.startProxy(req);
// end } ….
Component Scan
Autowired
Original annotation
Call bean’s method
![Page 37: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/37.jpg)
Easy to add functions
• Of course, you can use AOP function • Try to add the Call-Blocking function to
the proxy service.
![Page 38: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/38.jpg)
Add Call-Blocking function (1)
@Component public class CallBlockingBean {
public void handleRequest(SipServletRequest req) throws IOException { if(isBlocked(req)) { SipServletResponse res = req.createResponse(SipServletResponse.SC_SERVICE_UNAVAILABLE); res.send(); return; } } ….
• Create new POJO for Call-Blocking
![Page 39: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/39.jpg)
Add Call-Blocking function(2)
@Aspect public class ProxyAround { @Autowired CallBlockingBean callBlocking;
@Around(“execution(ProxyHandler.handleRequest(..)) && args(req)”) public void handleRequest(ProceedingJointPoint pjp, SipServletRequest req) throws IOException { callBlocking.handleRequest(req); pjp.proceed(new Object[]{req});
} ….
• Create Aspect class for Advice
![Page 40: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/40.jpg)
Add Call-Blocking function (3)
<aop:aspectj-autoproxy proxy-target-class="true"/> <context:component-scan base-package="org.mobicents.ssf.examples.sip.beans"> <context:include-filter type="aspectj" expression="org..ProxyAround*" /> </context:component-scan>
<context:component-scan base-package="org.mobicents.ssf.examples.sip.sipserver“/>
• Add configurations for AOP
Just Do It!
![Page 41: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/41.jpg)
CDI-Telco-Framework CTF
![Page 42: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/42.jpg)
CDI JSR-299 CDI is the Java standard for dependency injection and contextual lifecycle management, led by Gavin King for Red Hat, Inc. and is a Java Community Process(JCP) specification that integrates cleanly with the Java EE platform. Any Java EE 6-compliant application server provides support for JSR-299 (even the web profile).
• Loose coupling with strong typing • Well-defined lifecycle for stateful objects bound to lifecycle contexts • Support for Java EE modularity and the Java EE component architecture
![Page 43: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/43.jpg)
CDI-Telco-Framework Mobicents brings the power and productivity benefits of CDI into the Mobicents Sip Servlets platform providing dependency injection and contextual lifecycle management for converged HTTP/SIP applications.
![Page 44: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/44.jpg)
CDI-Telco-Framework
Mission Statement
• simplify SipServlets development by introducing a clean programming model
• ease of development by making available SIP utilities out of the box
• providing dependency injection and contextual lifecycle management to the SipServlets.
![Page 45: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/45.jpg)
CDI-Telco-Framework public class SipRegistarClient {
.... @Inject
SipFactory sipFactory;
protected void doRegister(@Observes @Register SipServletRequest req) throws ServletException, IOException { .... register user here ...
}
![Page 46: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/46.jpg)
Contact
• Naoki Nishihara – [email protected]
• Jean Deruelle – [email protected]
• Georges – [email protected]
• Vladimir Ralev – [email protected]
![Page 47: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/47.jpg)
Gratitude
![Page 48: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/48.jpg)
Appendix
![Page 49: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/49.jpg)
Configuration
• mss-1.6.0-snapshot-jboss-jdk6-5.1.0GA-1103310643 – With Simple B2BUA application
• SIPp as UAC & UAS • Jdk1.6.0_24 • RHEL5 2.6.18-164.el5
![Page 50: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/50.jpg)
Target server machine
HP PROLIANT DL360 G6(504634-291) • Intel(R) Xeon(R) CPU E5540 @
2.53GHz stepping 05 – 4 core
• Memory: 32G
![Page 51: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/51.jpg)
Default GC
![Page 52: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/52.jpg)
Long Load
![Page 53: Tunning mobicent-jean deruelle](https://reader036.vdocuments.site/reader036/viewer/2022081404/559633511a28abca2e8b480d/html5/thumbnails/53.jpg)
Over Load