108
Leak Pruning Michael Bond Kathryn McKinley The University of Texas at Austin

Leak Pruning

  • Upload
    joy

  • View
    48

  • Download
    0

Embed Size (px)

DESCRIPTION

Michael Bond Kathryn McKinley The University of Texas at Austin. Leak Pruning. Deployed Software Fails. Deployed Software Fails. Driverless truck 10,000 lines of C#. http://www.codeproject.com/KB/showcase/IfOnlyWedUsedANTSProfiler.aspx. Deployed Software Fails. Driverless truck - PowerPoint PPT Presentation

Citation preview

Page 1: Leak Pruning

Leak PruningMichael Bond Kathryn McKinley

The University of Texas at Austin

Page 2: Leak Pruning

Deployed Software Fails

Page 3: Leak Pruning

Deployed Software Fails

http://www.codeproject.com/KB/showcase/IfOnlyWedUsedANTSProfiler.aspx

Driverless truck 10,000 lines of C#

Page 4: Leak Pruning

Deployed Software Fails

http://www.codeproject.com/KB/showcase/IfOnlyWedUsedANTSProfiler.aspx

Driverless truck 10,000 lines of C#

Leak: past obstacles remained reachable

Page 5: Leak Pruning

Deployed Software Fails

http://www.codeproject.com/KB/showcase/IfOnlyWedUsedANTSProfiler.aspx

Driverless truck 10,000 lines of C#

Leak: past obstacles remained reachable

No immediate symptoms“This problem was pernicious because it only showed up after 40 minutes to an hour of driving around and collecting obstacles.”

Page 6: Leak Pruning

Deployed Software Fails

http://www.codeproject.com/KB/showcase/IfOnlyWedUsedANTSProfiler.aspx

Driverless truck 10,000 lines of C#

Leak: past obstacles remained reachable

No immediate symptoms“This problem was pernicious because it only showed up after 40 minutes to an hour of driving around and collecting obstacles.”

Quick “fix”: restart after 40 minutes

Page 7: Leak Pruning

Deployed Software Fails

http://www.codeproject.com/KB/showcase/IfOnlyWedUsedANTSProfiler.aspx

Driverless truck 10,000 lines of C#

Leak: past obstacles remained reachable No immediate symptoms

“This problem was pernicious because it only showed up after 40 minutes to an hour of driving around and collecting obstacles.”

Quick “fix”: restart after 40 minutes Environment sensitive

More obstacles in deployed setting Unresponsive after 28 minutes

Page 8: Leak Pruning

Deployed Software Fails

Driverless truck 10,000 lines of C#

Leak: past obstacles remained reachable No immediate symptoms

“This problem was pernicious because it only showed up after 40 minutes to an hour of driving around and collecting obstacles.”

Quick “fix”: restart after 40 minutes Environment sensitive

More obstacles in deployed setting Unresponsive after 28 minutes

Different environments & inputs different

behavior

Uncertainty in deployed systems

Hard to fix before

deployment

Page 9: Leak Pruning

Tolerating Memory Leaks Deployed systems have leaks

Critical systems need immediate help

Leak pruning tolerates bad effects Reclaims memory automatically High precision & low overhead Bounds resources Preserves semantics

Page 10: Leak Pruning

Outline

Why tolerate leaks

Why leaks are so bad

How leak pruning works

How leak pruning predicts leaked objects

Evaluation

Page 11: Leak Pruning

Memory Leaks in Deployed Systems Memory leaks are a real problem

Managed languages do not eliminate them

Page 12: Leak Pruning

Memory Leaks in Deployed Systems Memory leaks are a real problem

Managed languages do not eliminate them

Reachable

Unreach

able

Page 13: Leak Pruning

Memory Leaks in Deployed Systems Memory leaks are a real problem

Managed languages do not eliminate them

Reachable

Page 14: Leak Pruning

Memory Leaks in Deployed Systems Memory leaks are a real problem

Managed languages do not eliminate them

Live

ReachableDead

Page 15: Leak Pruning

Memory Leaks in Deployed Systems Memory leaks are a real problem

Managed languages do not eliminate them

Live

ReachableDead

Page 16: Leak Pruning

Memory Leaks in Deployed Systems Memory leaks are a real problem

Managed languages do not eliminate them

Live

ReachableDead

Page 17: Leak Pruning

Memory Leaks in Deployed Systems Memory leaks are a real problem

Managed languages do not eliminate them

Live

Reachable

Dead

Page 18: Leak Pruning

Memory Leaks in Deployed Systems Memory leaks are a real problem

Managed languages do not eliminate them

Slow & crash real programs

LiveDead

Page 19: Leak Pruning

Memory Leaks in Deployed Systems Memory leaks are a real problem

Managed languages do not eliminate them

Slow & crash real programs Unacceptable for some applications

Page 20: Leak Pruning

Memory Leaks in Deployed Systems Memory leaks are a real problem

Managed languages do not eliminate them

Slow & crash real programs Unacceptable for some applications

Fixing leaks is hard Leaks take time to materialize Failure far from cause

Page 21: Leak Pruning

Outline

Why tolerate leaks

Why leaks are so bad

How leak pruning works

How leak pruning predicts leaked objects

Evaluation

Page 22: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness

Live

Reachable

Dead

Page 23: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness Take action when memory exhausted

Live

Reachable

Dead

Page 24: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness Take action when memory exhausted

Live

ReachableDead

Page 25: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness Take action when memory exhausted

Live

Dead Throw OOM error

Out of memor

y!

Page 26: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness Take action when memory exhausted

Live

Dead

Out of memor

y!

Throw OOM error

Reclaim some

objects

Page 27: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness Reclaim predicted dead objects

Recla

imed

Live

Page 28: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness Reclaim predicted dead objects

Recla

imed

Live

Page 29: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness Reclaim predicted dead objects

Recla

imed

Live

AB

Page 30: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness Reclaim predicted dead objects

Live

A?

Page 31: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness Reclaim predicted dead objects Poison references to reclaimed objects

Live

AX

Page 32: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness Reclaim predicted dead objects Poison references to reclaimed objects

Live

AXThrow InternalError with OOMError attached

Page 33: Leak Pruning

Reclaiming Memory while Preserving Semantics

Garbage collection based on liveness Reclaim predicted dead objects Poison references to reclaimed objects

Live

AXThrow InternalError with OOMError attached

Worst case: defers fatal

errorsBest case: keeps leaky programs running much

longer or indefinitely

Page 34: Leak Pruning

Outline

Why tolerate leaks

Why leaks are so bad

How leak pruning works

How leak pruning predicts leaked objects

Evaluation

Page 35: Leak Pruning

Predicting Dead Objects Predicting the future

Leaked objects not used again Highly stale objects likely leaked[Chilimbi & Hauswirth ’04] [Qin et al. ’05] [Bond & McKinley ’06]

Page 36: Leak Pruning

Predicting Dead Objects

Predicting the future Leaked objects not used again Highly stale objects likely leaked

Alternative: offload to disk [Melt, Bond & McKinley ’08] [LeakSurvivor, Tang et al. ’08] [Panacea, Goldstein et al. ’07, Breitgand et al. ’07] Tolerates mispredictions Eventually exhausts disk (if disk at all)

Page 37: Leak Pruning

Predicting Dead Objects

Predicting the future Leaked objects not used again Highly stale objects likely leaked

Alternative: offload to disk [Melt, Bond & McKinley ’08] [LeakSurvivor, Tang et al. ’08] [Panacea, Goldstein et al. ’07, Breitgand et al. ’07] Tolerates mispredictions Eventually exhausts disk (if disk at all)

Need high precision

One misprediction: program terminates

Page 38: Leak Pruning

Predicting Dead Data Structures Identify references to prune

Roots of leaked data structures Categorize by reference type

ParserInfoPreparedStatement

Page 39: Leak Pruning

Predicting Dead Data Structures Identify references to prune

Roots of leaked data structures Categorize by reference type

Criteria Highly stale references

▪ More stale than most stale instance accessed previously

ParserInfoPreparedStatement

MaxS&U

2-4 GCs

Page 40: Leak Pruning

Predicting Dead Data Structures Identify references to prune

Roots of leaked data structures Categorize by reference type

Criteria Highly stale references

▪ More stale than most stale instance accessed previously

Reference type keeping most bytes reachable

ParserInfoPreparedStatement

MaxS&U

2-4 GCs

Size

132MB

Page 41: Leak Pruning

Predicting Dead Data Structures Identify references to prune

Roots of leaked data structures Categorize by reference type

Criteria Highly stale references

▪ More stale than most stale instance accessed previously

Reference type keeping most bytes reachablePiggyback on GC: two-phase transitive closure

ParserInfoPreparedStatement

MaxS&U

2-4 GCs

Size

132MB

Page 42: Leak Pruning

MySQL Leak

Based on colleague’s JDBC application

Leak: SQL statements remain in set

Page 43: Leak Pruning

HashSetParser

Info

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

MySQL Leak

Page 44: Leak Pruning

HashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

MySQL Leak

Page 45: Leak Pruning

Transitive Closure: Phase OneHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

Page 46: Leak Pruning

Transitive Closure: Phase OneHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32

Page 47: Leak Pruning

Transitive Closure: Phase OneHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32

Page 48: Leak Pruning

Transitive Closure: Phase OneHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32

Page 49: Leak Pruning

Transitive Closure: Phase OneHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

enqueued

enqueued

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32

Page 50: Leak Pruning

Transitive Closure: Phase OneHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

enqueued

enqueued

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32

enqueued

enqueued

enqueued

enqueued

Page 51: Leak Pruning

Transitive Closure: Phase TwoHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

enqueued

enqueued

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

0

0

0

enqueued

enqueued

enqueued

enqueued

Page 52: Leak Pruning

Transitive Closure: Phase TwoHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

enqueued

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

enqueued

enqueued

enqueued

enqueued

20

0

0

Page 53: Leak Pruning

Transitive Closure: Phase TwoHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

enqueued

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

60

enqueued

enqueued

enqueued

enqueued

0

0

Page 54: Leak Pruning

Transitive Closure: Phase TwoHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

enqueued

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

572

enqueued

enqueued

enqueued

enqueued

0

0

Page 55: Leak Pruning

Transitive Closure: Phase TwoHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

572

enqueued

enqueued

enqueued

enqueued

0

0

Page 56: Leak Pruning

Transitive Closure: Phase TwoHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

572

enqueued

enqueued

enqueued

enqueued

244

0

Page 57: Leak Pruning

Transitive Closure: Phase TwoHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

420M

180M

0

Page 58: Leak Pruning

Select Best Reference TypeHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

420M

180M

0

Page 59: Leak Pruning

Prune Selected Reference TypeHashSet

……

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

ParserInfo

ResultSet

HashEntry

PreparedStatement

Field[]

byte[][] byte[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

420M

180M

0

Page 60: Leak Pruning

Prune Selected Reference TypeHashSet

……

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

420M

180M

0

Page 61: Leak Pruning

Leak Partially EliminatedHashSet

……

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

0

0

0

Page 62: Leak Pruning

Transitive Closure: Phase OneHashSet

……

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

0

0

0

enqueued

enqueued

enqueued

Page 63: Leak Pruning

Transitive Closure: Phase TwoHashSet

……

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

50M

220M

0

Page 64: Leak Pruning

Select Best Reference TypeHashSet

……

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

50M

220M

0

Page 65: Leak Pruning

Prune Selected Reference TypeHashSet

……

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

ResultSet

HashEntry

PreparedStatement

Field[]

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

50M

220M

0

Page 66: Leak Pruning

Prune Selected Reference TypeHashSet

HashEntry

PreparedStatement

HashEntry

PreparedStatement

HashEntry

PreparedStatement

HashEntry PreparedStatement

PreparedStatement ParserInfo

PreparedStatement ResultSet

MaxS&U

0-1

0-1

16-32Bytes

50M

220M

0

Page 67: Leak Pruning

HashSet

HashEntry

PreparedStatement

HashEntry

PreparedStatement

HashEntry

PreparedStatement

Algorithm efficiently selects

references to consistently unused data structures based on type

Prediction Summary

Page 68: Leak Pruning

Outline

Why tolerate leaks

Why leaks are so bad

How leak pruning works

How leak pruning predicts leaked objects

Evaluation

Page 69: Leak Pruning

Implementation

Leak pruning added to Jikes RVM 2.9.2http://www.jikesrvm.org/Research+Archive

Page 70: Leak Pruning

Implementation

Leak pruning added to Jikes RVM 2.9.2http://www.jikesrvm.org/Research+Archive

Performance stress test Non-leaking programs: DaCapo & SPEC

benchmarks Low overhead

▪ 3% (Core 2) or 5% (Pentium 4)▪ Primarily read barriers

Page 71: Leak Pruning

Tolerating LeaksLeak Leak pruning’s effect

Eclipse “Diff” Tolerates until 24-hr limit (>200X longer)

ListLeak Tolerates until 24-hr limit (>25,000X longer)

SwapLeak Tolerates until 24-hr limit (>2,200X longer)

Eclipse “Copy-Paste” Most dead but some live (81X longer)

MySQL Most dead but some live (35X longer)

JbbMod All dead but pruning misses some (21X longer)

SPECjbb2000 Heap growth is mostly live (4.7X longer)

Mckoi Database Thread leak: extra support needed (1.6X longer)

DualLeak Heap growth is live (No help)

Page 72: Leak Pruning

Tolerating LeaksLeak Leak pruning’s effect

Eclipse “Diff” Tolerates until 24-hr limit (>200X longer)

ListLeak Tolerates until 24-hr limit (>25,000X longer)

SwapLeak Tolerates until 24-hr limit (>2,200X longer)

Eclipse “Copy-Paste” Most dead but some live (81X longer)

MySQL Most dead but some live (35X longer)

JbbMod All dead but pruning misses some (21X longer)

SPECjbb2000 Heap growth is mostly live (4.7X longer)

Mckoi Database Thread leak: extra support needed (1.6X longer)

DualLeak Heap growth is live (No help)

Page 73: Leak Pruning

Tolerating LeaksLeak Leak pruning’s effect

Eclipse “Diff” Tolerates until 24-hr limit (>200X longer)

ListLeak Tolerates until 24-hr limit (>25,000X longer)

SwapLeak Tolerates until 24-hr limit (>2,200X longer)

Eclipse “Copy-Paste” Most dead but some live (81X longer)

MySQL Most dead but some live (35X longer)

JbbMod All dead but pruning misses some (21X longer)

SPECjbb2000 Heap growth is mostly live (4.7X longer)

Mckoi Database Thread leak: extra support needed (1.6X longer)

DualLeak Heap growth is live (No help)

Page 74: Leak Pruning

Leak Leak pruning’s effect

Eclipse “Diff” Tolerates until 24-hr limit (>200X longer)

ListLeak Tolerates until 24-hr limit (>25,000X longer)

SwapLeak Tolerates until 24-hr limit (>2,200X longer)

Eclipse “Copy-Paste” Most dead but some live (81X longer)

MySQL Most dead but some live (35X longer)

JbbMod All dead but pruning misses some (21X longer)

SPECjbb2000 Heap growth is mostly live (4.7X longer)

Mckoi Database Thread leak: extra support needed (1.6X longer)

DualLeak Heap growth is live (No help)

Tolerating Leaks

Page 75: Leak Pruning

Leak Leak pruning’s effect

Eclipse “Diff” Tolerates until 24-hr limit (>200X longer)

ListLeak Tolerates until 24-hr limit (>25,000X longer)

SwapLeak Tolerates until 24-hr limit (>2,200X longer)

Eclipse “Copy-Paste” Most dead but some live (81X longer)

MySQL Most dead but some live (35X longer)

JbbMod All dead but pruning misses some (21X longer)

SPECjbb2000 Heap growth is mostly live (4.7X longer)

Mckoi Database Thread leak: extra support needed (1.6X longer)

DualLeak Heap growth is live (No help)

Tolerating Leaks

Page 76: Leak Pruning

Leak Leak pruning’s effect

Eclipse “Diff” Tolerates until 24-hr limit (>200X longer)

ListLeak Tolerates until 24-hr limit (>25,000X longer)

SwapLeak Tolerates until 24-hr limit (>2,200X longer)

Eclipse “Copy-Paste” Most dead but some live (81X longer)

MySQL Most dead but some live (35X longer)

JbbMod All dead but pruning misses some (21X longer)

SPECjbb2000 Heap growth is mostly live (4.7X longer)

Mckoi Database Thread leak: extra support needed (1.6X longer)

DualLeak Heap growth is live (No help)

Tolerating Leaks

Object[] Date

MaxS&U

16-32

Orderline String 0-1

Page 77: Leak Pruning

Tolerating LeaksLeak Leak pruning’s effect

Eclipse “Diff” Tolerates until 24-hr limit (>200X longer)

ListLeak Tolerates until 24-hr limit (>25,000X longer)

SwapLeak Tolerates until 24-hr limit (>2,200X longer)

Eclipse “Copy-Paste” Most dead but some live (81X longer)

MySQL Most dead but some live (35X longer)

JbbMod All dead but pruning misses some (21X longer)

SPECjbb2000 Heap growth is mostly live (4.7X longer)

Mckoi Database Thread leak: extra support needed (1.6X longer)

DualLeak Heap growth is live (No help)

Page 78: Leak Pruning

Tolerating LeaksLeak Leak pruning’s effect

Eclipse “Diff” Tolerates until 24-hr limit (>200X longer)

ListLeak Tolerates until 24-hr limit (>25,000X longer)

SwapLeak Tolerates until 24-hr limit (>2,200X longer)

Eclipse “Copy-Paste” Most dead but some live (81X longer)

MySQL Most dead but some live (35X longer)

JbbMod All dead but pruning misses some (21X longer)

SPECjbb2000 Heap growth is mostly live (4.7X longer)

Mckoi Database Thread leak: extra support needed (1.6X longer)

DualLeak Heap growth is live (No help)

Reported on Eclipse Bugzilla

Leak: recursive difference

Automated with Eclipse Plugin

Page 79: Leak Pruning
Page 80: Leak Pruning
Page 81: Leak Pruning
Page 82: Leak Pruning
Page 83: Leak Pruning
Page 84: Leak Pruning

Low footprint &often helps a

lot all-the-time

deployed use

Performance Summary

Page 85: Leak Pruning

Related Work

Memory corruption & concurrency bugs Perturb layout & scheduling [Rx, Qin et al. ’05]

[DieHard, Berger & Zorn ’06] [Atom-Aid, Lucia et al. ’08] [Grace, Berger et al. ’08]

Fatal errors Ignore errors [Failure-oblivious computing,

Rinard et al. ’04] [Append, Dobolyi & Weimer ’08]

Page 86: Leak Pruning

Related Work

Memory corruption & concurrency bugs Perturb layout & scheduling [Rx, Qin et al. ’05]

[DieHard, Berger & Zorn ’06] [Atom-Aid, Lucia et al. ’08] [Grace, Berger et al. ’08]

Fatal errors Ignore errors [Failure-oblivious computing, Rinard

et al. ’04] [Append, Dobolyi & Weimer ’08]

Memory leaks in unmanaged languages Leak-friendly layout [Plug, Novark et al. ’08] Bound allocation sites [Cyclic alloc, Nguyen &

Rinard ’07]

Page 87: Leak Pruning

Finding leaks before deployment is hard Deployed systems need immediate help

Leak pruning: GC based on liveness High precision & low overhead Bounded resources Preserves semantics

Tolerating Memory Leaks in Managed Languages

Page 88: Leak Pruning

Finding leaks before deployment is hard Deployed systems need immediate help

Leak pruning: GC based on liveness High precision & low overhead Bounded resources Preserves semantics

Tolerating Memory Leaks in Managed Languages

Thank you!

Page 89: Leak Pruning

Backup

Page 90: Leak Pruning

Eclipse “Diff” Leak

Reported on Eclipse Bugzilla Recursive difference leaks memory

Page 91: Leak Pruning

Eclipse “Diff” LeakEditors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Piggyback on GC: two-phase transitive closure

First phase stops at highly stale references No instance highly stale & accessed

Page 92: Leak Pruning

Fine-Grained Usage Tracking

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Garbage collector:

for all objects o o.staleness++;

Application:t = o.f;t.staleness = 0;

Page 93: Leak Pruning

Fine-Grained Usage Tracking

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Garbage collector:for all objects o o.staleness++; for all fields o.f o.f |= 0x1;

Application:t = o.f;if (t & 0x1) { t &= ~0x1; t.staleness = 0; o.f = t; [atomic]

}

Page 94: Leak Pruning

Fine-Grained Usage Tracking

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Page 95: Leak Pruning

Summarize Stale Data Structures

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Piggyback on GC: two-phase transitive closure

First phase stops at highly stale references No instance highly stale & accessed

Page 96: Leak Pruning

Phase One of Transitive Closure

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Page 97: Leak Pruning

Phase One of Transitive Closure

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Page 98: Leak Pruning

Phase Two of Transitive Closure

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Piggyback on GC: two-phase transitive closure

First phase stops at highly stale references No instance highly stale & accessed

Second phase: bytes reachable from each ref Reference type with most bytes: selected

for pruning

Page 99: Leak Pruning

Phase Two of Transitive Closure

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Page 100: Leak Pruning

Phase Two of Transitive Closure

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Page 101: Leak Pruning

Phase Two of Transitive Closure

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Page 102: Leak Pruning

Select Reference Type

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

TreeEditor

ResourceCompare

Page 103: Leak Pruning

Prune Selected Reference Type

Editors

… ……

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

StructuralDiff Data

TreeEditor

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

TreeEditor

ResourceCompare

Page 104: Leak Pruning

Prune Selected Reference Type

Editors

… ……

StructuralDiff Data

FilteredNode

StructuralDiff Data

FilteredNode

StructuralDiff Data

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

TreeEditor

ResourceCompare

Page 105: Leak Pruning

Editors

… ……

StructuralDiff Data

FilteredNode

StructuralDiff Data

FilteredNode

StructuralDiff Data

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

Phase One of Transitive Closure

Page 106: Leak Pruning

Select Another Reference Type

Editors

… ……

StructuralDiff Data

FilteredNode

StructuralDiff Data

FilteredNode

StructuralDiff Data

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

FilteredNode

ResourceCompare

Page 107: Leak Pruning

Prune Reference Type

Editors

… ……

StructuralDiff Data

FilteredNode

StructuralDiff Data

FilteredNode

StructuralDiff Data

FilteredNode

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

FilteredNode

ResourceCompare

Page 108: Leak Pruning

Prune Reference Type

Editors

… …

Editor

Editor

Editor ResourceCompare

ResourceCompare

ResourceCompare

FilteredNode

ResourceCompare