MST

星途 面试题库

面试题:JavaScript 在 Node 中如何优雅处理操作系统内存限制

假设 Node 应用运行在一个内存受限的操作系统环境中,使用 JavaScript 实现一套机制,当内存使用接近系统限制时,能自动释放部分缓存数据以避免进程因内存不足而崩溃,并阐述其中的设计原理。
37.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

实现代码如下

const os = require('os');
const cache = {};
const MAX_MEMORY_USAGE_RATIO = 0.8;

function monitorMemory() {
    const totalMemory = os.totalmem();
    const usedMemory = process.memoryUsage().rss;
    const memoryUsageRatio = usedMemory / totalMemory;

    if (memoryUsageRatio >= MAX_MEMORY_USAGE_RATIO) {
        // 这里简单实现为清空缓存,实际应用可根据缓存重要性等策略释放部分缓存
        Object.keys(cache).forEach(key => delete cache[key]);
    }
}

setInterval(monitorMemory, 1000);

// 示例缓存添加函数
function setCache(key, value) {
    cache[key] = value;
}

// 示例缓存获取函数
function getCache(key) {
    return cache[key];
}

设计原理阐述

  1. 内存监控
    • 使用 os.totalmem() 获取系统总内存,process.memoryUsage().rss 获取当前 Node 进程已使用的内存。
    • 计算内存使用率 memoryUsageRatio,判断是否接近系统限制(这里设置为80%)。
  2. 缓存释放
    • 当内存使用率达到设定的阈值时,执行缓存释放操作。在示例代码中,简单地清空了整个缓存对象 cache。在实际应用中,可以根据缓存数据的重要性、使用频率等策略,选择性地释放部分缓存数据。
  3. 定时监控
    • 使用 setInterval 每 1 秒调用一次 monitorMemory 函数,持续监控内存使用情况,确保在内存接近限制时及时释放缓存,避免进程因内存不足而崩溃。