webpack / enhanced-resolve

Offers an async require.resolve function. It's highly configurable.
MIT License
916 stars 186 forks source link

pathUtils | joinCache memory leak #414

Open Galcarmi opened 2 months ago

Galcarmi commented 2 months ago

Hey guys,

We use webpack in our services to bundle code. A webpack compiler is being created for each bundling process by importing webpack creator function from webpack. Webpack is using enhanced-resolve to resolve module paths.. We also have custom resolvers that extends ResolvePluginInstance which is a enhanced-resolve resolver AFAIK. Those resolvers are injected to webpack using the plugins property

After a while, we saw that as the service bundle code a memory leak is increasing in our service. (for each bundle a new compiler of webpack is created)

As you can see in the heap-dump picture, it is related to joinCache property. Screenshot 2024-04-24 at 15 05 00

This property can be found here. this is a non-exported global variable that never cleans.

As I can see it, you can help us in 2 ways,

1) Clean this Map every X interval (it will be amazing if you can provide a configuration for it) 2) Provide a function that cleans that cache and we will call it after every bundle process.

LMK if you need any further data/explanations, Thanks πŸ™πŸΌπŸ™πŸΌ

alexander-akait commented 2 months ago

Oh, it was for cache, how many run do you have?

Galcarmi commented 2 months ago

@alexander-akait The service runs (potentially) infinite bundling processes

Galcarmi commented 2 months ago

I can create a PR for adding a clearCache function, WDYT?

By the way, there is a third option to use LRU cache object with fixed size

Galcarmi commented 2 months ago

@alexander-akait πŸ™πŸΌ

Galcarmi commented 2 months ago

created a fork with the fix https://github.com/webpack/enhanced-resolve/pull/418 i'll try it on my servers and update..

Galcarmi commented 2 months ago

Well, seems like it works, can we do something similar for enhanced-resolve?