Performance Pitfalls  Paul Lockwood About the Presenter  Über-geek  First computer in 1981  First fulltime IT job in 1989  Clipper/Dbase IV,

Download Report

Transcript Performance Pitfalls  Paul Lockwood About the Presenter  Über-geek  First computer in 1981  First fulltime IT job in 1989  Clipper/Dbase IV,

Performance Pitfalls
 Paul Lockwood
About the Presenter
 Über-geek
 First computer in 1981
 First fulltime IT job in 1989
 Clipper/Dbase IV, PowerBuilder, Java, C#
 Contracted most of career
 Lived/ worked in four different countries
 Vast exposure to different approaches
 Stand on Shoulders of Giants
Causes are Well Known
 Memory Issues
 Mainly leaks, sometimes churn/ GC issues
 I/O
 Disk, network
 100% CPU
 Runaway threads
 Bad SQL, very poor DB Design
 Blocking lock around cache reads
 Knock on effect of spin-waits, waiting on I/O
Performance Basics
 Orders of Magnitude
 Services are thousands, even millions of times
slower
 Architecture can guarantee poor performance
 Typical Tuners think in milliseconds
 We Look for Big Mistakes
 Generally Ignore:





Value/reference boxing
Static method vs v-table lookup
Most marshaling
Hash lookups
Concatenating strings
Removing Guesswork
Summary
Warm Average
Magnitude
InProcess
680ns
1
Named Pipes Pooled (10K requests)
35us
102
Named Pipes (Connect, Disconnect)
237us
103
Web Service Local [REST result]
1ms [1.6ms]
104
Web Service LAN [REST result]
5.5ms [4ms]
104
Web Service Internet [REST result]
80ms [35ms]
105
MySQL Local Pooled
0.5ms
103
MySQL Local Non Pooled
6.2ms
104
6ms
104
2,700ms
107
MySQL LAN Pooled
MqSQL LAN Non Pooled
1ns is one CPU Cycle on a 1Ghz Processor
Architectural Mistakes
 Overuse of SOA, DI/IoC, Reflection etc
 ~100ms per SOA call is typical
 All are difficult to debug
 Layer and compile-in often the best choice
 Homegrown Frameworks
 Since 2000s these mostly fail
 Architect’s continued control prevents rescue
 Buzzword/Resume Driven Architectures
Demos #1
 JMeter to load test
 IDE to attach, pause and view all
threads
N-Tier: Popular but slow
Web Servers
Application Servers
User 1
User 2
Firewall/ Load Balancer
User Gazillion
Session State Server
The Cloud (Services)
DataBase Servers
Often with Two or
Three-way replication
Demos #2
 WinDbg – Analyzing a Production Dump
 Screen Captures from Real World Tuning
Personal Quick Wins
 Find/ Remove Memory Leaks

Static HashTable is classic example


Even saw a Logging Sink with contentions!
ReaderWriterLocks are easy fixes
 Remove .Net Exceptions used in Logic
 Remove unnecessary Locking





Short circuit SOA/ Web Service calls
SQL Tuning, even just adding Indexes!
Very chatty SQL calls -> pure Server or pure client
‘Real OOP’ Code -> Trivial SQL Code
Stop Log.Debug writing to Database
 Cache Lookup data (lazy load Singleton with IDispose)

Consider Implementing ‘Clear Cache Page’
More Difficult Fixes
 Complex sproc vs 10klocs of C#/Java code
 Automated Developer Tests essential with complexity
 SQL Optimization
 Hints, really understand data, rewrite sprocs..
 3-Tier Library total re-write
 Fought Architecture Team in a multinational
 Native Memory Leak
 Very hard to reproduce caching issue
 Advice from others totally misleading
 IISDiag confirmed the leak, then JMeter isolated
 Code Simplifications
 Hard coded logic -> Table driven methods
 XMLDocument parsing -> xsd.exe/ XmlBeans
Locating the Problem
 Existing Excuses


Only happens in live Environments


We have special hardware
Cannot reproduce traffic

Hardware is not good enough, need 64Gb etc
Problem Domain is insanely complex
 Test machine




Replicate live data if possible
CPU Horsepower is not really important
IDE useful to compile/ debug
Exclusive access to database, test hardware!!
 Taking Dumps (Not Recommended)



WinDbg, sos.dll, adplus, IISDiag (auto scripts) etc
Like CSI, it’s a snapshot in time
Total experts only – sole job function perhaps?
Final Slide
 Feedback is much appreciated
 DotNetWorkaholic.com
N-Tier/ Distributed Objects
- The Mysterious Allure of distributing objects
“Objects have been around for a while, and sometimes it seems
that ever since they were created, folks have wanted to
distribute them. However, distribution of objects, or indeed of
anything else, has a lot more pitfalls than many people realize,
especially when they’re under the influence of vendors’ cozy
brochures.”
Martin Fowler (2002)
 Distributing Objects:
 Increases Expense
 Increases Complexity
 Reduces Performance
Scalability





Look at Performance first

Scalability seems easier/ sexier


Use common sense; ask why not
Any ORM should scale: tune/cache the hot paths


Most apps are mostly reads, few writes. i.e. Cache for reads
Async audit/ analytics tracking to other servers

How many people have ten to fifteen web/app servers in
production?
Product X, Y or Z won’t Scale! Really?
DataBase writes are an ideal Bottleneck
Horizontal vs Vertical scaling
Major Enemies



Session State
Pessimization (Pessimistic Optimization)
Insane Architects :)