Application Profiling for Memory and Performance

30
Application Profiling for Memory & Performance Srinath Perera WSO2 Inc Pradeep Fernando WSO2 Inc Dinuka Malalanayke WSO2 Inc

description

 

Transcript of Application Profiling for Memory and Performance

Page 1: Application Profiling for Memory and Performance

Application Profiling

for

Memory & Performance

Srinath Perera

WSO2 Inc

Pradeep Fernando

WSO2 Inc

Dinuka Malalanayke

WSO2 Inc

Page 2: Application Profiling for Memory and Performance

Understanding Server Performance

Page 3: Application Profiling for Memory and Performance

When Concurrency Increases?

• Throughput increases, but where will it stop?

• When there are contention for the server

• Contention for what? o CPU

o Memory

o Disk - I/O

o Network -I/O

• If your server running on full capacity, there should be at

least one resource under contention.

Page 4: Application Profiling for Memory and Performance

How to measure Contention?

• CPU - CPU or load average

• Memory - GC logs, monitor memory, sometime swapping

• Disk I/O - IOPS per seconds, load average

• Network I/O - network utilization, load average

• What is load average? length of processor queue of the OS

• How much load average is too much? o Load average = number of cores (machine is fully used)

o Load average = 2* number of cores (machine is loaded)

Page 5: Application Profiling for Memory and Performance

If you cannot find contention

• Either load is too small

• You have too much locks. Look for lock profile

• Server might be processing with too less threads (IO and

CPU thread switches)

Page 6: Application Profiling for Memory and Performance

Performance Tuning

• Increase throughput/ latency or both

• Know that latency vs. throughput is often a tradeoff

• Run the system and see how it does, make sure you are

putting in enough load

• Verify where is the bottleneck? is it CPU, memory, network,

or disk

• Start tuning

Page 7: Application Profiling for Memory and Performance

Tuning

• When you tune, bottlenecks will shift, you will have to shift

your focus

• Can you tune settings (Application, JVM, OS) to improve and

shift the bottleneck? play with parameters .. we call this

parameter sweep

• Then focus on the code, look for right profile o CPU profile

o Memory/ Allocation profile

o Network profile

o IO profile

o Database profile

Page 8: Application Profiling for Memory and Performance

Programmer Nightmares

Page 9: Application Profiling for Memory and Performance

Permgen Errors

CPU spin

DeadLocks

Unacceptable Latency NullPointer

ArrayIndexOutOfBoundsException

ClassCastException

Programmer Nightmares

[image] http://www1.free-clipart.net/gallery2/clipart/Holidays/Halloween/Ghost_-_Boo.jpg

OutofMemoryException

Page 10: Application Profiling for Memory and Performance

Introducing: Profiling...

• Best thing would be to write bug free, high performant code

• Normally development happens in iterative manner - get

something to work and improve on that.

• Basic profiling can help you to eliminate most of the memory

and performance issues.

Page 11: Application Profiling for Memory and Performance

Right Tools...

• There are many commercial and open source tools

• We are going to use, o Jprofiler by ejTechnologies

CPU, Memory, Allocation, Network, DB

o Eclipse Memory Analyzer tool

Find memory leaks

o Standard JDK tooling - Jconsole

Basic stats

[image] http://writingsongs.com/pictures/toolbox.jpg

Page 12: Application Profiling for Memory and Performance

Environment Setup

With WSO2 Carbon

Page 13: Application Profiling for Memory and Performance

Setting up JProfiler

• Profiling modes local/remote

• Applying common filters for WSO2 products

• Different views..

Page 14: Application Profiling for Memory and Performance

JProfiler Contd.

CPU view

- Call trees, Hot spots

Memory view

- Allocation Hot spots, Recorded objects, Heap walker

VM telemetry view

- Memory, Threads status graphs

Probes

- JDBC , Sockets

Page 15: Application Profiling for Memory and Performance

JConsole

• Connect to the running instance local/remote

• Different memory banks

• Getting most out of Mbeans.

• Getting a memory dump and analyzing with Eclipse MAT.

• Remote JMX URL gets printed in the console during server

startup:

JMX Service URL : service:jmx:rmi://localhost:11111/jndi/rmi://localhost:9999/jmxrmi

username : admin password : admin

Page 16: Application Profiling for Memory and Performance

JConsole

Page 17: Application Profiling for Memory and Performance

Memory Analyzer Tool

• Analyze heap dumps.

• Identifying OOM issues are trivial with basic leak report.

Page 18: Application Profiling for Memory and Performance

Usual Suspects

Some of the common issues...

Page 19: Application Profiling for Memory and Performance

Permgen Errors

• Permgen space relates to the 'Programme code' part, a.k.a -

Loaded classes.

• ClassLoader leaks

• Typically happens in Container environments

• Can uncover by doing deploy/redeploy cycles.

• If one of the application objects get referenced by an object,

outside the application, permgen error waiting to happen.

Page 20: Application Profiling for Memory and Performance

Permgen Errors

Container

URLClassLoader Application

Application Objects Container provided

Objects

Page 21: Application Profiling for Memory and Performance

Memory Leaks - OOM

• Languages like C, gave the control of memory to the

programmer.

• Java is a managed memory, language.

• Still the JVM can't free up the memory, if the application is

holding on to the objects.

• Unnecessary accumulation of objects, o Object creation for each and every connection

o Slow output rate in the input/output system

o Collecting clusterwide messages without an upper bound.

Page 22: Application Profiling for Memory and Performance

DeadLocks

• Re-designing the lock acquiring sequence

• Using LockManagers that keeps track of lock acquisition

Resource A

Resource B

Page 23: Application Profiling for Memory and Performance

Liveness issues...

• Starvation - A thread can starve for CPU cycles, if it is

blocked by a lock-wait.

• Poor Responsiveness

• LiveLock scenarios

Page 24: Application Profiling for Memory and Performance

Programming Best Practices

• Think about memory aspects/ data retrieval process while

writing code.

• Optimize the critical Path (look at CPU profile).

• Make use of Standard libs as much as possible.

• Profile your apps before releasing them to production.

Page 25: Application Profiling for Memory and Performance

WSO2 make use of profiling ?

Page 26: Application Profiling for Memory and Performance

Identity Server - Losing weight

• Carbon server optimized to run in constrained memory

environment.

• No front end components - 'createWorker' ant task.

• Selective Admin service loading. -Doptimized=true

• Removed unwanted functionality based on the use-case,

(p2 - provisioning, etc)

Page 27: Application Profiling for Memory and Performance

Raspberry-Pi Clusters

• Application server

cluster running on R-

Pis.

• Powering the

WSO2Con 2013

mobile app

• 512MB of RAM and

ARM processor.

Page 28: Application Profiling for Memory and Performance

Demo

CPU spin and Memory leak scenario

Page 29: Application Profiling for Memory and Performance

Questions

Page 30: Application Profiling for Memory and Performance

Thank You