CentOS配置Node.js内存限制的常用方法
Node.js默认内存限制取决于系统位数:32位系统约1.5GB,64位系统约2GB。当应用处理大数据或复杂任务时,需通过以下方法调整内存限制:
--max-old-space-size命令行参数设置这是最直接的配置方式,启动应用时通过--max-old-space-size参数指定堆内存上限(单位:MB)。例如,将内存限制设为2GB:
node --max-old-space-size=2048 your-app.js
适用场景:临时测试或直接运行应用的场景。
NODE_OPTIONS设置通过设置NODE_OPTIONS环境变量,使内存限制在每次启动应用时自动生效。例如:
export NODE_OPTIONS="--max-old-space-size=4096"
node your-app.js
持久化配置:将上述命令添加到~/.bashrc(用户级)或/etc/profile(系统级)文件中,执行source ~/.bashrc使配置生效。
适用场景:需要重复启动应用且希望避免每次输入参数的情况。
PM2是常用的Node.js进程管理工具,可通过配置文件或命令行参数设置内存限制:
ecosystem.config.js文件,内容如下:module.exports = {
apps: [{
name: 'your-app',
script: 'your-app.js',
max_memory_restart: '4G' // 内存超过4GB时自动重启
}]
};
启动命令:pm2 start ecosystem.config.js--max-memory-restart参数设置:pm2 start your-app.js --max-memory-restart 4G
适用场景:需要进程守护(如自动重启)或多应用管理的场景。
若应用通过systemd服务管理(如作为系统服务运行),可在服务文件中配置内存限制:
/etc/systemd/system/your-app.service),在[Service]部分添加:Environment="NODE_OPTIONS=--max-old-space-size=4096"
ExecStart=/usr/bin/node /path/to/your-app.js
sudo systemctl daemon-reload
sudo systemctl restart your-app
适用场景:应用以systemd服务形式长期运行的场景。
若应用运行在Docker容器中,可通过Docker的内存限制功能约束Node.js进程的内存使用:
--memory参数设置容器内存上限,并通过--max-old-space-size设置Node.js进程内存限制:docker run -m 4g --name your-app-container -e NODE_OPTIONS="--max-old-space-size=2048" your-image-name
deploy.resources.limits中设置容器内存限制:version: '3.8'
services:
your-app:
image: your-image-name
deploy:
resources:
limits:
memory: 4g
environment:
- NODE_OPTIONS=--max-old-space-size=2048
适用场景:应用部署在Docker容器中的场景。
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory),或设置过大浪费系统资源。pm2 logs或journalctl -u your-app),便于监控内存使用情况。