tuning and development with sip servlets on mobicents

53

Upload: jean-deruelle

Post on 03-Jul-2015

4.781 views

Category:

Technology


0 download

DESCRIPTION

Tuning of JVM options for running Mobicents and Rapid Application Development with CDI Telco Framework and Spring Signaling Framework

TRANSCRIPT

Page 1: Tuning and development with SIP Servlets on Mobicents
Page 2: Tuning and development with SIP Servlets on Mobicents

Tuning and development with SIP Servlet on Mobicents

Naoki NishiharaOKI Electric Industry Co.,LtdJean DeruelleMobicents Sip Servlets Lead

Page 3: Tuning and development with SIP Servlets on Mobicents

Agenda

• Introduction• SIP Application behavior• How to tune the JavaVM for SIP Servlet• How to develop SIP Servlet Application

with Frameworks

Page 4: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

About OKI

• Founded– January 1881

• Major Operation– Manufacturing and sales of products,

technologies, software and solutions for telecommunications systems and information systems

Page 6: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

SIP Servlet Behavior

Page 8: Tuning and development with SIP Servlets on Mobicents

SIP Servlet Behavior (1)

• To establish one session, some messages are sent and received.

Page 9: Tuning and development with SIP Servlets on Mobicents

Basic B2BUA sequenceUAC UASMSS

INVITEINVITE

180/INVITE180/INVITE

200/INVITE200/INVITE

ACKACK

BYEBYE

Established Session

200/BYE200/BYE

•2 dialogs•6 transactions•12 messages

Page 10: Tuning and development with SIP Servlets on Mobicents

SIP Servlet Behavior (2)

• Many object will be generated in one sequence.

Page 11: Tuning and development with SIP Servlets on Mobicents

Created instancesAfter 10,000 calls (NOT TERMINATED SESSION)

NameValueListNameValueHostPortHostDuplicateNameValueListMultiValueMapImplSipURIAuthorityAddressImpl

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: Tuning and development with SIP Servlets on Mobicents

Mobicents SIP Servlet own behavior

• JAIN-SIP, SIP Servlet, JBoss(J2EE)…

About 200 Threads run on MSS(for transport, timer, cluster…)

Page 13: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

How To Tune the Java VM

Page 16: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

Test SequenceUAC UASMobicnets

INVITEINVITE

180/INVITE180/INVITE

200/INVITE200/INVITE

ACKACK

BYEBYE

Established Session

200/BYE200/BYE

10sec

30sec

About 16,000 sessions will remain on JVM

Page 18: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

Data and results

1. Default GC2. CMS GC without tuning the duty cycle3. CMS GC with tuning the duty cycle4. Add parallel NewGC and performance options

Analyze:GC, CPU usage, failed call, succeeded call,Retransmissions, Average response time,…

Page 22: Tuning and development with SIP Servlets on Mobicents

GC options (1)

-Xms6g-Xmx6g-XX:PermSize=256m-XX:MaxPermSize=256m

Page 23: Tuning and development with SIP Servlets on Mobicents

Default GC

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

0 100 200 300 400 500 600 700

u s s y id wa

0

1000000

2000000

3000000

4000000

5000000

6000000

0 100 200 300 400 500 600 700 8000

1

2

3

4

5

6

7

8

9

10

be f o re s iz e (KB) a f t e r s iz e (KB) s to p t ime (s )

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

0 100 200 300 400 500 6000

50

100

150

200

250

300

350

400

450

500

Fa ile dCa ll(P) Re t ran s m is s io n s (P)

0

200

400

600

800

1000

1200

1400

1600

1800

2000

0 100 200 300 400 500 600

>=200

Over thousands failed callsAnd retransmissions

“Stop The World”about 8 seconds

Thousands responsestook more than 200ms

Page 24: Tuning and development with SIP Servlets on Mobicents

GC options (2)

-Xms6g-Xmx6g-XX:PermSize=256m-XX:MaxPermSize=256m

-XX:UseConcMarkSweepGC-XX:+CMSIncrementalMode

Page 25: Tuning and development with SIP Servlets on Mobicents

CMS GC without tuning the duty cycle

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

0 100 200 300 400 500 600 700

us s y id wa

0

1000000

2000000

3000000

4000000

5000000

6000000

0 100 200 300 400 500 600 700 8000

1

2

3

4

5

6

7

8

9

10

be f o re s iz e (KB) a f t e r s iz e (KB) s t o p t ime (s )

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

0 100 200 300 400 500 6000

50

100

150

200

250

300

350

400

450

500

Fa ile dCa ll(P) Re t ran s mis s io n s (P)

0

20

40

60

80

100

120

140

160

180

200

0 100 200 300 400 500 600

>=200

0 failed call

GC pause timeless than 100ms

CPU usage increased

Decreasedtime-consumingresponse

Page 26: Tuning and development with SIP Servlets on Mobicents

GC options (3)

-XX:UseConcMarkSweepGC-XX:+CMSIncrementalMode

-XX:-CMSIncrementalPacing-XX:CMSIncrementalDutyCycle=100-XX:CMSIncrementalDutyCycleMin=100

Page 27: Tuning and development with SIP Servlets on Mobicents

0

1000000

2000000

3000000

4000000

5000000

6000000

0 100 200 300 400 500 600 7000

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

be f o re s iz e (KB) a f t e r s iz e (KB) s to p t ime (s )

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

0 100 200 300 400 500 600 700

u s s y id wa

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

0 100 200 300 400 500 6000

50

100

150

200

250

300

350

400

450

500

Fa ile dCa ll(P) Re t ran s mis s io n s (P)

0

20

40

60

80

100

120

140

160

180

200

0 100 200 300 400 500 600

>=200

CMS GC withtuning the duty cycle

CPU usage decreased

Retransmissions decreased

GC pause timeless than 100ms

Decreasedtime-consumingresponse

Page 28: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

Add parallel NewGC and performance options

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

0 100 200 300 400 500 600 700

u s s y id wa

0

1000000

2000000

3000000

4000000

5000000

6000000

0 100 200 300 400 500 600 7000

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

be f o re s iz e (KB) a f t e r s iz e (KB) s t o p t ime (s )

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

0 100 200 300 400 500 600 7000

50

100

150

200

250

300

350

400

450

500

Fa ile dCa ll(P) Re tran s mis s io n s (P)

0

20

40

60

80

100

120

140

160

180

200

0 100 200 300 400 500 600

>=200

CPU usage decreased

Memory usage decreased

Retransmissions increased

Increasedtime-consumingresponse

Page 30: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

Developing SIP Servlet with frameworks

Page 32: Tuning and development with SIP Servlets on Mobicents

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 developmentWe want to merge these framework’s functions and support many developers!

Page 33: Tuning and development with SIP Servlets on Mobicents

Spring Signaling FrameworkSSF

Page 34: Tuning and development with SIP Servlets on Mobicents

How to develop SIP Servlet application with SSF

Page 35: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

Create SIP Servlet with POJO@Componentpublic 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: Tuning and development with SIP Servlets on Mobicents

Easy to add functions

• Of course, you can use AOP function• Try to add the Call-Blocking function to

the proxy service.

Page 38: Tuning and development with SIP Servlets on Mobicents

Add Call-Blocking function (1)

@Componentpublic 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: Tuning and development with SIP Servlets on Mobicents

Add Call-Blocking function(2)

@Aspectpublic 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: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

CDI-Telco-FrameworkCTF

Page 42: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

CDI-Telco-Framework

public class SipRegistarClient {

....@Inject

SipFactory sipFactory;

protected void doRegister(@Observes @Register SipServletRequest req) throws ServletException, IOException { .... register user here ...

}

Page 46: Tuning and development with SIP Servlets on Mobicents

Contact

• Naoki Nishihara– [email protected]

• Jean Deruelle– [email protected]

• Georges– [email protected]

• Vladimir Ralev– [email protected]

Page 47: Tuning and development with SIP Servlets on Mobicents

Gratitude

Page 48: Tuning and development with SIP Servlets on Mobicents

Appendix

Page 49: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

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: Tuning and development with SIP Servlets on Mobicents

Default GC

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

0 100 200 300 400 500 600 700

u s s y id wa

0

1000000

2000000

3000000

4000000

5000000

6000000

0 100 200 300 400 500 600 700 8000

1

2

3

4

5

6

7

8

9

10

be f o re s iz e (KB) a f t e r s iz e (KB) s to p t ime (s )

0

10

20

30

40

50

60

70

80

90

100

0 100 200 300 400 500 6000

1000

2000

3000

4000

5000

6000

7000

8000

9000

Fa ile dCa ll(P) Re t ran s mis s io n s (P)

0

200

400

600

800

1000

1200

1400

1600

1800

2000

0 100 200 300 400 500 600

>=200

Page 52: Tuning and development with SIP Servlets on Mobicents

Long Load

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

0 8000 16000 24000 32000 40000 48000

u s s y id wa

0

1000000

2000000

3000000

4000000

5000000

6000000

0 1000 2000 3000 4000 5000 6000 7000 8000 9000 100000

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

be f o re s iz e (KB) a f t e r s iz e (KB) s t o p t ime (s )

0

20

40

60

80

100

120

140

160

180

200

0 8000 16000 24000 32000 40000 48000

>=200

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

0 8000 16000 24000 32000 40000 480000

50

100

150

200

250

300

350

400

450

500

Fa ile dCa ll(P) Re t ran s m is s io n s (P)

Page 53: Tuning and development with SIP Servlets on Mobicents

Over Load

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

0 200 400 600 800 1000 1200 1400 1600 1800 2000

u s s y id wa

0

1000000

2000000

3000000

4000000

5000000

6000000

0 200 400 600 800 1000 1200 1400 1600 1800 20000

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

be f o re s iz e (KB) a f t e r s iz e (KB) s to p t ime (s )

0

1

2

3

4

5

6

7

8

9

10

0 200 400 600 800 1000 1200 1400 1600 1800 20000

200

400

600

800

1000

1200

1400

1600

1800

Fa ile dCa ll(P) Re t ran s mis s io n s (P)

0

100

200

300

400

500

600

0 200 400 600 800 1000 1200 1400 1600 1800 2000

>=200