Winmem
May 27, 2020 · View on GitHub
SlimIO Winmem is a Node.js binding which expose low-level Microsoft APIs on Memory.
This binding expose the following methods/struct:
- GetPerfomanceInfo
- GlobalMemoryStatusEx
- GetProcessMemoryInfo
- PERFORMANCE_INFORMATION
- MEMORYSTATUSEX
- PROCESS_MEMORY_COUNTERS_EX
⚠️ All methods are handled asynchronously in a Worker to not starve the event-loop.
Requirements
- Node.js v12 or higher.
Getting Started
This package is available in the Node Package Repository and can be easily installed with npm or yarn.
$ npm i @slimio/winmem
# or
$ yarn add @slimio/winmem
Usage example
Get, global or by process, memory informations !
const winmem = require("@slimio/winmem");
async function main() {
const perfomanceInfo = await winmem.getPerformanceInfo();
console.log(perfomanceInfo);
const globalMemory = await winmem.globalMemoryStatus();
console.log(globalMemory);
const processMemories = await windrive.getProcessMemory();
for (const [processName, processMemory] of Object.entries(processMemories)) {
console.log(`${processName} : ${JSON.stringify(processMemory, null, 4)}`);
}
}
main().catch(console.error);
API
getPerformanceInfo: Promise< PerfomanceInfo >
Retrieves the currently performance information. Return a PerfomanceInfo Object.
export interface PerfomanceInfo {
commitTotal: number;
commitLimit: number;
commitPeak: number;
physicalTotal: number;
physicalAvailable: number;
systemCache: number;
kernelTotal: number;
kernelPaged: number;
kernelNonpaged: number;
pageSize: number;
handleCount: number;
processCount: number;
threadCount: number;
}
globalMemoryStatus: Promise< GlobalMemory >
Retrieves the currently gloval memory status. Return a GlobalMemory Object.
export interface GlobalMemory {
dwMemoryLoad: number;
ullTotalPhys: number;
ullAvailPhys: number;
ullTotalPageFile: number;
ullAvailPageFile: number;
ullTotalVirtual: number;
ullAvailVirtual: number;
ullAvailExtendedVirtual: number;
}
getProcessMemory: Promise< ProcessMemory[] >
Retrieves all currently process memories. Return a ProcessMemories Object.
export interface ProcessMemories{
[processName: string]: ProcessMemory;
}
export interface ProcessMemory {
error: string;
processId: number;
pageFaultCount: number;
peakWorkingSetSize: number;
workingSetSize: number;
quotaPeakPagedPoolUsage: number;
quotaPagedPoolUsage: number;
quotaPeakNonPagedPoolUsage: number;
quotaNonPagedPoolUsage: number;
pagefileUsage: number;
peakPagefileUsage: number;
privateUsage: number;
}
If the result of
errorproperty isnull, all properties (exceptprocessId) are equal to0
Contribution Guidelines
To contribute to the project, please read the code of conduct and the guide for N-API compilation.
Dependencies
| Name | Refactoring | Security Risk | Usage |
|---|---|---|---|
| node-addon-api | ⚠️Major | Low | Node.js C++ addon api |
| node-gyp-build | ⚠️Major | Low | Node-gyp builder |
License
MIT