Links

  • 1. Sogeti
  • 2. JBoss
  • 3. IBM
  • 4. Oracle
  • 5. SpringSource
  • 6. NL-JUG
  • 7. Java

Archives

Syndication  RSS 2.0

RSS 1.0
RSS 2.0

Bookmark this site

Add 'JCN Blog' site to delicious  Add 'JCN Blog' site to technorati  Add 'JCN Blog' site to digg  Add 'JCN Blog' site to dzone

Posted by Erwin De Gier at 14:52 on Wednesday 11 June    Add 'Zoeken naar een speld in een heap dump' site to delicious  Add 'Zoeken naar een speld in een heap dump' site to technorati  Add 'Zoeken naar een speld in een heap dump' site to digg  Add 'Zoeken naar een speld in een heap dump' site to dzone

Afgelopen week hadden we een OutOfMemoryException in een van de Java applicaties die we beheren. De heapdump liet gelukkig het volgende plaatje zien.

heap1

Er is dus één instantie van de org.postgresql.jdbc3.Jdbc3ResultSet die 1.3 GB ruimte op de heap inneemt. Hoogstwaarschijnlijk is er een query die een zeer groot resultaat oplevert. Door te klikken in het taart diagram en te kiezen voor “List objects -> with outgoing references” worden alle referenties vanuit de Jdbc3ResultSet getoond.

heap2

Op deze manier is de uiteindelijke SQL query snel gevonden. Jdbc3ResultSet.statement.fragments staat een String array die de hele query bevat.

heap3

Nu we de query hebben, is de oorzaak een stuk makkelijker te achterhalen. De namen in de query geven al de aanwijzing dat het een door hibernate gegeneerde query is. Het zou mooi zijn als we ook weten op welke record wordt gezocht. Gelukkig heeft onze query maar 1 parameter, een id in ons geval. Deze parameter staat onder Jdbc3ResultSet.preparedParameters.paramValues in een Object array. Het id heeft de waarde 163109200.

heap4

We hebben de query met een count laten draaien op de productie database, deze gaf aan dat het resultaat ongeveer 7 keer zo groot was als het eerstvolgende grote resultaat. Dit was dus de oorzaak van de OutOfMemoryException. We hebben het record een status gegeven die ervoor zorgt dat de batch applicatie dit record overslaat. De batch kon nu doordraaien zonder fouten. Parallel wordt uitgezocht wat de functionele status is van het record, zodat deze eventueel handmatig kan worden verwerkt.


© 2018 Java Competence Network. All Rights Reserved.