Ubuntu中Node.js内存配置方法
Node.js使用V8引擎,默认内存限制为:32位系统约512MB,64位系统约1.5GB。当应用处理大数据或复杂任务时,需通过--max-old-space-size参数调整堆内存上限(单位:MB)。
export NODE_OPTIONS="--max-old-space-size=4096" # 设置为4GB
node your-app.js
~/.bashrc或~/.zshrc),添加上述export命令,运行source ~/.bashrc使配置生效。scripts字段中直接指定参数,适用于项目级配置。{
"scripts": {
"start": "node --max-old-space-size=4096 app.js",
"start:prod": "NODE_OPTIONS='--max-old-space-size=8192' node server.js" # 生产环境设为8GB
}
}
PM2是Node.js常用进程管理器,可自动重启崩溃进程、监控内存使用,并设置内存阈值触发重启。
npm install pm2 -g
--max-memory-restart参数指定内存上限(支持G/M单位),超过阈值时自动重启。pm2 start your-app.js --max-memory-restart 4G # 内存超4GB时重启
pm2 save
pm2 startup
若应用运行在Docker容器中,可通过docker run命令或docker-compose.yml限制容器内存,间接约束Node.js内存。
-m参数设置容器内存上限(如4GB)。docker run -m 4g --name node-app -p 3000:3000 your-node-image
deploy.resources中设置内存预留(reservations)。version: '3.8'
services:
app:
build: .
deploy:
resources:
reservations:
memory: 4G # 限制容器内存为4GB
若将Node.js作为系统服务运行(如通过systemctl管理),可在服务文件中配置内存限制。
sudo nano /etc/systemd/system/node-app.service
Environment设置NODE_OPTIONS,LimitNOFILE调整文件描述符限制):[Unit]
Description=Node.js Application
After=network.target
[Service]
ExecStart=/usr/bin/node /usr/src/app/your-app.js
WorkingDirectory=/usr/src/app
User=your-user
Group=your-group
Environment="NODE_OPTIONS=--max-old-space-size=4096"
LimitNOFILE=65536 # 提高文件描述符限制(可选)
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start node-app
sudo systemctl enable node-app # 开机自启
单纯增加内存限制仅能缓解问题,需结合代码优化减少内存占用:
fs.createReadStream()。const fs = require('fs');
const readStream = fs.createReadStream('large-file.txt', { encoding: 'utf8' });
readStream.on('data', (chunk) => {
// 逐块处理数据
});
null。node-cache库),减少重复计算或数据库查询。process.memoryUsage()监控内存变化,或使用heapdump生成堆快照,分析内存泄漏点。const heapdump = require('heapdump');
heapdump.writeSnapshot('/tmp/heapdump.heapsnapshot'); // 生成堆快照