![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/lavocat.quebec/private_html/scripts/ |
#!/usr/bin/env node
// Memory monitoring script to prevent Node.js crashes
const os = require('os');
const fs = require('fs');
const path = require('path');
class MemoryMonitor {
constructor() {
this.lastCheck = Date.now();
this.checkInterval = 30000; // 30 seconds
this.maxMemoryUsage = 0.8; // 80% of available memory
this.maxHeapUsage = 0.9; // 90% of heap size
console.log('๐ง Memory Monitor Started');
console.log(`๐ System Memory: ${(os.totalmem() / 1024 / 1024 / 1024).toFixed(2)} GB`);
console.log(`๐ Available Memory: ${(os.freemem() / 1024 / 1024 / 1024).toFixed(2)} GB`);
this.startMonitoring();
}
getMemoryInfo() {
const memUsage = process.memoryUsage();
const systemFree = os.freemem();
const systemTotal = os.totalmem();
return {
heapUsed: memUsage.heapUsed,
heapTotal: memUsage.heapTotal,
external: memUsage.external,
rss: memUsage.rss,
systemFree,
systemTotal,
systemUsed: systemTotal - systemFree,
heapUsagePercent: (memUsage.heapUsed / memUsage.heapTotal) * 100,
systemUsagePercent: ((systemTotal - systemFree) / systemTotal) * 100
};
}
logMemoryStatus() {
const memInfo = this.getMemoryInfo();
console.log('๐ Memory Status:');
console.log(` Heap Used: ${(memInfo.heapUsed / 1024 / 1024).toFixed(2)} MB`);
console.log(` Heap Total: ${(memInfo.heapTotal / 1024 / 1024).toFixed(2)} MB`);
console.log(` Heap Usage: ${memInfo.heapUsagePercent.toFixed(2)}%`);
console.log(` System Used: ${(memInfo.systemUsed / 1024 / 1024 / 1024).toFixed(2)} GB`);
console.log(` System Usage: ${memInfo.systemUsagePercent.toFixed(2)}%`);
console.log(` External: ${(memInfo.external / 1024 / 1024).toFixed(2)} MB`);
console.log(` RSS: ${(memInfo.rss / 1024 / 1024).toFixed(2)} MB`);
// Check for memory issues
if (memInfo.heapUsagePercent > 85) {
console.warn('โ ๏ธ High heap usage detected!');
this.forceGarbageCollection();
}
if (memInfo.systemUsagePercent > 90) {
console.error('๐จ Critical system memory usage!');
this.emergencyCleanup();
}
}
forceGarbageCollection() {
if (global.gc) {
console.log('๐งน Forcing garbage collection...');
global.gc();
// Log memory after GC
setTimeout(() => {
const memInfo = this.getMemoryInfo();
console.log(`โ
After GC - Heap: ${(memInfo.heapUsed / 1024 / 1024).toFixed(2)} MB (${memInfo.heapUsagePercent.toFixed(2)}%)`);
}, 1000);
} else {
console.warn('โ ๏ธ Garbage collection not available (run with --expose-gc)');
}
}
emergencyCleanup() {
console.log('๐จ Emergency cleanup initiated...');
// Force multiple GC cycles
if (global.gc) {
for (let i = 0; i < 3; i++) {
global.gc();
}
}
// Log final status
setTimeout(() => {
const memInfo = this.getMemoryInfo();
console.log(`๐ Emergency cleanup complete - Heap: ${(memInfo.heapUsed / 1024 / 1024).toFixed(2)} MB`);
}, 2000);
}
startMonitoring() {
setInterval(() => {
this.logMemoryStatus();
}, this.checkInterval);
}
}
// Start monitoring if this script is run directly
if (require.main === module) {
new MemoryMonitor();
}
module.exports = MemoryMonitor;