-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmem.js
36 lines (30 loc) · 1.42 KB
/
mem.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function monitorPackageMemoryUsage(packageName) {
const Module = require('module');
const originalRequire = Module.prototype.require;
const moduleMemoryUsage = {};
Module.prototype.require = function(moduleName) {
// Call the original require
const result = originalRequire.apply(this, arguments);
// Start monitoring after the target package is loaded
if (moduleName === packageName || moduleMemoryUsage[packageName]) {
const initialMemoryUsage = process.memoryUsage().heapUsed;
// Check if the module (or one of its dependencies) is being required for the first time
if (!moduleMemoryUsage[moduleName]) {
const finalMemoryUsage = process.memoryUsage().heapUsed;
moduleMemoryUsage[moduleName] = finalMemoryUsage - initialMemoryUsage;
}
}
return result;
};
process.on('exit', () => {
console.log(`Memory Usage by ${packageName} and Dependencies (MB):`);
const memoryUsageInMB = {};
for (const moduleName in moduleMemoryUsage) {
memoryUsageInMB[moduleName] = (moduleMemoryUsage[moduleName] / (1024 * 1024)).toFixed(2) + ' MB';
}
console.log(memoryUsageInMB);
});
// Manually load the target package to start the monitoring
originalRequire.apply(this, [packageName]);
}
module.exports = monitorPackageMemoryUsage;