A reusable memory profiling tool for NestJS services, providing easy-to-apply decorators to track memory consumption in both synchronous and asynchronous methods.
- Memory profiling for all methods in a service class.
- Separate decorators for profiling individual sync and async functions.
- Uses the
pino
logger for detailed asynchronous, color-coded console output. - Configurable via environment variables.
npm install @mahabub-arafat/memory-profiler
- Add a
.env
file to your project and enable memory profiling by setting:
ENABLE_MEMORY_PROFILING_DECORATOR=true
- Import the profiler into your service and apply the
ProfileAllMethods
decorator:
import { Injectable } from '@nestjs/common';
import { ProfileAllMethods } from 'sharetrip-memory-profiler';
@Injectable()
@ProfileAllMethods()
export class AppService {
async getAvailableFlights() {
// some logic
}
async timedoutSearch() {
// some logic
}
}
When this service's methods are executed, the memory consumption will be logged to the console:
INFO [2024-10-23 10:51:53.710 +0600] (776639 on st): Async -> Function: getAvailableFlights, startMemory: 45.57MB, endMemory: 44.62MB, memoryConsumed: -0.95MB, executionTime : 2450 ms
WARN [2024-10-23 10:52:21.261 +0600] (776639 on st): Async -> Function: timedoutSearch, startMemory: 42.17MB, endMemory: 36.15MB, memoryConsumed: -6.02MB, executionTime : 30000 ms
To apply memory profiling to all methods in a service class, use the ProfileAllMethods
decorator:
import { Injectable } from '@nestjs/common';
import { ProfileAllMethods } from 'sharetrip-memory-profiler';
@Injectable()
@ProfileAllMethods()
export class SomeService {
// Your service methods
}
For profiling individual synchronous functions, use ProfileMemorySyncFunction
:
import { ProfileMemorySyncFunction } from 'sharetrip-memory-profiler';
export class SomeService {
@ProfileMemorySyncFunction()
someSyncMethod() {
// Your method logic
}
}
For profiling individual asynchronous functions, use ProfileMemoryAsyncFunction
:
import { ProfileMemoryAsyncFunction } from '@mahabub-arafat/memory-profiler';
export class SomeService {
@ProfileMemoryAsyncFunction()
async someAsyncMethod() {
// Your async method logic
}
}
The memory profiler is controlled via an environment variable:
ENABLE_MEMORY_PROFILING_DECORATOR=true
: Enables the memory profiling decorators.
If the variable is not set or set to false
, the decorators will be ignored.
The memory profiler uses pino
with pino-pretty
for enhanced console logging. You can customize the logging format in the utilities.ts
file or directly in the code as needed.
This project is licensed under the Apache License 2.0 . See the LICENSE file for details.
Contributions are welcome! Feel free to submit a pull request or open an issue on the GitHub repository.