java tools and techniques for solving tricky problem

17

Upload: will-iverson

Post on 19-May-2015

883 views

Category:

Technology


2 download

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

Page 1: Java Tools and Techniques for Solving Tricky Problem
Page 2: Java Tools and Techniques for Solving Tricky Problem

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  

Page 3: Java Tools and Techniques for Solving Tricky Problem

The  Setup  

  IT  has  dead  bodies  

  What  happened…  and  next  steps?  

Page 4: Java Tools and Techniques for Solving Tricky Problem

Finding  Bodies  

  Profiler?  

  Heap  dumps  

  Thread  dumps    Stack  traces  

Page 5: Java Tools and Techniques for Solving Tricky Problem

 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  

Page 6: Java Tools and Techniques for Solving Tricky Problem

Getting  Thread  Dumps  

  Built-­‐in  Executables  (available  in  prod)    jstack    jconsole    Jvisualvm  

  All  profilers    Only  available  in  dev  

Page 7: Java Tools and Techniques for Solving Tricky Problem

Beat  Patrol  

  Get  to  know  the  neighborhood  when  nothing    is  going  on…    Heap    Thread  Dump    Profilers  (CPU)  

Page 8: Java Tools and Techniques for Solving Tricky Problem

Cases  

  Memory  Problem  #1  

  Memory  Problem  #2  

  Thread  Dump  #1  

  Thread  Dump  #2  

  Thread  Dump  #3  

  Memory  Problem  #3  

Page 9: Java Tools and Techniques for Solving Tricky Problem

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  

Page 10: Java Tools and Techniques for Solving Tricky Problem

Reconstructing  Crimes  

  jstack  

  jmap  (ha!)  

  Attach  with  Visual  VM  

  Attach  with  jconsole  

  Use  Profilers  (skip  jhat)    Cheap,  powerful  

Page 11: Java Tools and Techniques for Solving Tricky Problem

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…  

Page 12: Java Tools and Techniques for Solving Tricky Problem

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  

Page 13: Java Tools and Techniques for Solving Tricky Problem

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  

Page 14: Java Tools and Techniques for Solving Tricky Problem

Tip:  Better  to  NOT  find  in  Production  

  Solution:  Solid  Automated  Tests,  Good  Perf  Environment  

  “Can’t  afford  to  automate”    “Can’t  afford  to  ship”  

Page 15: Java Tools and Techniques for Solving Tricky Problem

Shameless  Plug  

  Agile  Testing    CI,  TDD    Expert  JUnit    DBUnit,  HTMLUnit,  Selenium    Automate  documentation  generation  

  March  25th  –  26th  

www.nukio.com  

Page 16: Java Tools and Techniques for Solving Tricky Problem
Page 17: Java Tools and Techniques for Solving Tricky Problem