[HN Gopher] Fuite: a tool for finding memory leaks in web apps ___________________________________________________________________ Fuite: a tool for finding memory leaks in web apps Author : todsacerdoti Score : 144 points Date : 2021-12-17 15:21 UTC (7 hours ago) (HTM) web link (nolanlawson.com) (TXT) w3m dump (nolanlawson.com) | tyingq wrote: | Memory leaks on the client side, in a single-page app. | danuker wrote: | Personally I prefer JS-light sites, but in today's SPA filled | world, this tool is very welcome. | scubakid wrote: | How do crawler approaches like this handle SPAs that have a | multi-step onboarding flow before getting into the actual heavy- | hitting areas that need the most testing? (e.g. where you may | have to click through several things before even hitting a route | change) | nolanl wrote: | Author here. I added support for custom scenarios, where you | can define a "setup" step that logs in or does whatever you may | need to do: https://github.com/nolanlawson/fuite/#extending- | the-default-... | bgirard wrote: | When I worked at Facebook, I worked on a web memory tracking tool | I was particularly proud. It went through links, grabbed heap | snapshots, diff'ed them, found objects that weren't cleaned up | and gave detailed information about its retain chain. You can see | a lighting talk I did on it at BlinkOn: | https://www.youtube.com/watch?v=JuyaGFApifA&t=1427s&ab_chann... | | We used it to find a problem fixed in React 18 that caused large | leaks on Facebook.com: | https://github.com/facebook/react/pull/21039#issuecomment-80... | | We also found one issue that caused a leak that's impossible to | spot unless you know how V8 closures are implemented and retain | one another. | | I'm really hoping to see Facebook open source the tool some day! | | Fuite seems really interesting. I like the idea of an automatic | crawler! | mrsharpoblunto wrote: | Hi bgirard! I support the FB team that works on this - it's on | the roadmap to open source hopefully H1 next year :) It's | continued to find significant leaks in other parts of our infra | too, so hopefully it will be equally helpful to others. Great | to see others looking at memory tools now too - I'll definitely | be checking Fuite out | lgong wrote: | Colleague of bgirard at Facebook here, we are planning to open | source the tool in 2022. Great to find someone also working on | memory tooling here :) Fuite seems really interesting, will try | it out! | nolanl wrote: | Author here. I wasn't aware of your talk, but it's super | interesting! Showing info about the retain chain is a great | idea, but I didn't get around to doing it in fuite. IME just | counting the number of objects is actually pretty effective to | find the smoking gun. (You leaked 1 event listener, which | leaked a bazillion strings, arrays, objects, etc., but all you | really care about is the 1 event listener.) | | I would love to see how your tool approaches this! Hope it gets | open-sourced. :) | nyellin wrote: | Very cool. Looks extremely easy to use which is the difference | between people using tools or just reading about them :) | | As an aside, I created some tooling for identifying memory leaks | in Python apps. Once I started sending the results to Slack and | formatting them nicely, I found people ran the tool more | frequently. Usability is everything. | krossitalk wrote: | Having to point at a URL and crawl for pages seems awkward. Is | there something I can directly integrate into my app? How would | it deal with a login page? | somehnacct3757 wrote: | Ran into the same limitation. I had tried logging in to a local | dev server and then running fuite, but it looks like it runs | the tests in its own personal chromium instance so my session | wasn't used. | | There are no memory leaks on my login and sign up pages though! | | edit: just checked the docs and it says you can specify a | scenario script with a setup hook to get passed authentication. | kohlerm wrote: | Almost all SPAs do have memory leaks in my experience. I was once | involved in Eclipse Memory Analyzer project(for Java, short MAT), | and I mentored a student who built a prototype to support JS in | MAT. We easily found significant memory leaks everywhere. That | prototype was never released for reasons I cannot comment on in | public. | vdnkh wrote: | misunderstood, nvm! | ahmedfromtunis wrote: | I think they meant the student built a prototype leaks | detector for SPAs. | vdnkh wrote: | Oh cool, thanks for the correction | enesismail wrote: | Gmail and other gsuite apps' developers, would you please use | Fuite? Thx. | krm01 wrote: | This is a welcome surprise. I have been hunting down memory leak | problems for a hardware installation that runs a JS heavy app | 24/7. Had to build in auto software resets just to clean the | garbage because there was no real solution. Looking forward | trying this out asap | antirez wrote: | This specific issue makes the "PHP way" (just to mention a | notable example) of having an interpreter created to serve a page | and then destroyed at the end, much more convenient, even if more | resource intensive. Assuming the problem is not in the Javascript | side of a single page application, of course. | [deleted] | The_rationalist wrote: | As a reminder, one can use weakreferences | sillyquiet wrote: | The only thing more tedious and brain-breaking than tracking down | client-side JS memory leaks is tracking down server-side JS | (Node) memory leaks. | kohlerm wrote: | Serious question, is it really more difficult fir server side | JS? At least you don't have to fiddle around with DOM | references. The potential impact on the server side is of | course potentially bigger. | sillyquiet wrote: | I mean it depends on the application naturally, but flame | graphs or no and especially when dealing with heap dump | comparisons, sometimes very opaquely named symbols, etc, it | can be an exercise in frustration. | Lamad123 wrote: | Is "fuite" french for fleeing? | iampims wrote: | Leak | oakfr wrote: | Turns out that it also means fleeing :) | kingcharles wrote: | This is actually really important. If you're a tab whore like me | you'll always find a site that eventually eats up all your RAM | and kills the browser dead. More SPAs need to test for memory | "leaks" like these, especially if they're repeatedly creating | large numbers of DOM elements through scripting. ___________________________________________________________________ (page generated 2021-12-17 23:00 UTC)