Tool to track down JavaScript memory leak

I have a web application which has a memory leak somewhere and I am unable to detect it. I already tried the Chrome developer tools which normally works great, but I am unable to track down the lines of code which are responsible. The Chrome tools just give me too much information and I can't relate the objects in memory to my code.

Are there any other tools that might be helpful?

Answers:

Answer

update: Lets use Record Heap Allocations profile type.

  1. open devtools profiler
  2. do a warm-up action
  3. start profiler
  4. repeat action a few times
  5. if the action has a leak you will see the same number of groups of blue bars in the overview pane
  6. stop the profiler
  7. select one group of these blue bars in the overview
  8. look into the list of objects

See screencast Javascript Memory Leak detection (Chrome DevTools)

was: You can use the next scenario for fining memory leaks.

  1. open devtools profiler
  2. do an action that makes a leak
  3. take a heap snapshot
  4. repeat steps 2 and 3 tree times
  5. select the latest heap snapshot
  6. change filter "All Object" to "Objects between Snapshot 1 and 2"

After that you will see objects a set of leaked objects. You can select an object and look at the list of retainers in Object's retaining tree

Answer

Use the innerHTML and outerHTML values of the element in the Detached DOM tree view of the Heap Profiler to map objects in memory to your code and track down memory leaks.

Answer

jQuery ajax requests were the biggest culprit in my app. Locate all your ajax jQuery functions: .ajax(), .get(), .post() and content setters: .html(), .text().

Go to the network tab in dev tools, refresh the current page 10 to 20 times. If you see things stacking up too frequently, or calls not being completed, you have a memory leak.

Here is a recent memory leak I was able to solve with jQuery.load()...

if(!jQuery.terms_html) $('#tc_container').load(STATIC_DOMAIN + '/terms.html', function() { jQuery.terms_html = $('#tc_container').html() }) else $('#tc_container').html(jQuery.terms_html)

Also, the latest version of jQuery at time of writing this is 3.3.1. Having the latest version installed is the best way to get started, if possible. https://github.com/jquery/jquery/releases

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.