java tools and techniques for solving tricky problem
DESCRIPTION
Most Java software problems come from the little “broken windows” – a null pointer here or there. Sometimes, however, you find yourself in a nasty section of town, with the heap, stack, and permgen brutally fighting for memory. Threads in nasty knife fights over resources. Sometimes just plain freaky things – how did I wind up with 1.5GB of HashSet allocations?In this edition of CSI: Seattle Java Edition, we’ll look at the tools available to combat these nasty foes and even see some of them in action – we will blow up a lot of application servers and JVMs in the process, with graphic results.TRANSCRIPT
Who Is This Guy? Will Iverson
[email protected] Check www.nukio.com for LinkedIn, Twitter, etc.
Java since 1995 Pascal/C/C++ before that… Apple, Symantec, Sun, BEA…
Four books on Java Hibernate, Web Services, Mac OS X Java, Jakarta Commons
Today: Architect, Consultant, Manager, Coach All Star Directories Nukio
The Setup
IT has dead bodies
What happened… and next steps?
Finding Bodies
Profiler?
Heap dumps
Thread dumps Stack traces
Getting Heap Dumps
Built-‐in Executables (available in prod) java (VM flag, dump on OOM) jmap jconsole (JMX) jvisualvm
All profilers YourKit, NetBeans, Eclipse, JProbe Only available in dev
Getting Thread Dumps
Built-‐in Executables (available in prod) jstack jconsole Jvisualvm
All profilers Only available in dev
Beat Patrol
Get to know the neighborhood when nothing is going on… Heap Thread Dump Profilers (CPU)
Cases
Memory Problem #1
Memory Problem #2
Thread Dump #1
Thread Dump #2
Thread Dump #3
Memory Problem #3
What about Serial Killers?
Really unique, horrible things Strange deadlocks JVM bugs Driver bugs
Avoid Dark Alleys Don’t write threading code unless you need to…
…and you probably don’t need to. Tip: try an in memory database (HSQLDB or db40)
Stateless, parallel operations KISS
More in futures section
Reconstructing Crimes
jstack
jmap (ha!)
Attach with Visual VM
Attach with jconsole
Use Profilers (skip jhat) Cheap, powerful
Most Normal Web Apps Problem is with db/JVM interaction, not JVM
Solution? P6spy JDBC Driver Shim Records database interaction Review in Excel or with Iron tools
http://www.cascadetg.com/hibernate/
Fit to target Yes, I know your 1,000,000 TPS billing system required
instruction counting… and you wound up sending it out for an ASIC, etc etc etc…
Tips
Single user on dev is a nice starting spot, but starve your resources. Allocate min to server. Should still be fast as all heck. Memory or CPU on a single page out of bounds = total
nightmare on server… think about all other requests coming in.
Know your targets Establish a baseline and a simple scorecard
Know your database All mainstream databases have great tools
Finding the Future
Stateless Services e.g. Spring MVC, REST Avoid Sessions & Wizards
Shopping cart… that stays around forever?
Key/Value Datastores BigTable, MongoDB, Amazon S3 Easy: play with today for free using Google AppEngine
Enhance Your Platform Track CPU/Memory Usage for Page Views Response times + browser rendering
Tip: Better to NOT find in Production
Solution: Solid Automated Tests, Good Perf Environment
“Can’t afford to automate” “Can’t afford to ship”
Shameless Plug
Agile Testing CI, TDD Expert JUnit DBUnit, HTMLUnit, Selenium Automate documentation generation
March 25th – 26th
www.nukio.com