@remotion/renderer
Version:
Render Remotion videos using Node.js or Bun
45 lines (44 loc) • 2.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAvailableMemory = void 0;
const node_os_1 = require("node:os");
const logger_1 = require("../logger");
const from_docker_cgroup_1 = require("./from-docker-cgroup");
const from_lambda_env_1 = require("./from-lambda-env");
const from_proc_meminfo_1 = require("./from-proc-meminfo");
const getAvailableMemory = (logLevel) => {
// If we are in Lambda, the most reliable way is to read the environment variable
// This is also pretty much free
const maxMemory = (0, from_lambda_env_1.getMaxLambdaMemory)();
if (maxMemory !== null) {
const nodeMemory = (0, node_os_1.freemem)();
return Math.min(nodeMemory, maxMemory);
}
// If cgroup memory data is available, we are in Docker, and we should respect it
const cgroupMemory = (0, from_docker_cgroup_1.getAvailableMemoryFromCgroup)();
if (cgroupMemory !== null) {
// There are 2 Docker memory configurations:
// 1. --memory=[num]
// 2. Global Docker memory limit
// If cgroup limit is higher than global memory, the global memory limit still applies
const nodeMemory = (0, node_os_1.freemem)();
const _procInfo = (0, from_proc_meminfo_1.getFreeMemoryFromProcMeminfo)(logLevel);
if (cgroupMemory > nodeMemory * 1.25 && Number.isFinite(cgroupMemory)) {
logger_1.Log.warn({ indent: false, logLevel }, 'Detected differing memory amounts:');
logger_1.Log.warn({ indent: false, logLevel }, `Memory reported by CGroup: ${(cgroupMemory / 1024 / 1024).toFixed(2)} MB`);
if (_procInfo !== null) {
logger_1.Log.warn({ indent: false, logLevel }, `Memory reported by /proc/meminfo: ${(_procInfo / 1024 / 1024).toFixed(2)} MB`);
}
logger_1.Log.warn({ indent: false, logLevel }, `Memory reported by Node: ${(nodeMemory / 1024 / 1024).toFixed(2)} MB`);
logger_1.Log.warn({ indent: false, logLevel }, 'You might have inadvertenly set the --memory flag of `docker run` to a value that is higher than the global Docker memory limit.');
logger_1.Log.warn({ indent: false, logLevel }, 'Using the lower amount of memory for calculation.');
}
return Math.min(nodeMemory, cgroupMemory);
}
const procInfo = (0, from_proc_meminfo_1.getFreeMemoryFromProcMeminfo)(logLevel);
if (procInfo !== null) {
return Math.min((0, node_os_1.freemem)(), procInfo);
}
return (0, node_os_1.freemem)();
};
exports.getAvailableMemory = getAvailableMemory;