Java Tools and Techniques for Solving Tricky Problem

1,231 views

Published on

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.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,231
On SlideShare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
24
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Java Tools and Techniques for Solving Tricky Problem

  1. 1. Who  Is  This  Guy?     Will  Iverson     wiverson@nukio.com     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  
  2. 2. The  Setup     IT  has  dead  bodies     What  happened…  and  next  steps?  
  3. 3. Finding  Bodies     Profiler?     Heap  dumps     Thread  dumps     Stack  traces  
  4. 4.  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  
  5. 5. Getting  Thread  Dumps     Built-­‐in  Executables  (available  in  prod)     jstack     jconsole     Jvisualvm     All  profilers     Only  available  in  dev  
  6. 6. Beat  Patrol     Get  to  know  the  neighborhood  when  nothing    is   going  on…     Heap     Thread  Dump     Profilers  (CPU)  
  7. 7. Cases     Memory  Problem  #1     Memory  Problem  #2     Thread  Dump  #1     Thread  Dump  #2     Thread  Dump  #3     Memory  Problem  #3  
  8. 8. 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  
  9. 9. Reconstructing  Crimes     jstack     jmap  (ha!)     Attach  with  Visual  VM     Attach  with  jconsole     Use  Profilers  (skip  jhat)     Cheap,  powerful  
  10. 10. 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…  
  11. 11. 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  
  12. 12. 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  
  13. 13. Tip:  Better  to  NOT  find  in   Production     Solution:  Solid  Automated  Tests,  Good  Perf   Environment     “Can’t  afford  to  automate”     “Can’t  afford  to  ship”  
  14. 14. Shameless  Plug     Agile  Testing     CI,  TDD     Expert  JUnit     DBUnit,  HTMLUnit,  Selenium     Automate  documentation  generation     March  25th  –  26th   www.nukio.com  

×