我有一个非常基本的
express.js
服务器,当我运行 tsx server.ts
时,它会导致节点进程快速达到超过 8GB 内存并开始进行交换。
代码
import express from 'express';
const app = express();
app.get('/', (req, res) => {
if (req.query.name) {
res.send(`Hello ${req.query.name}`);
} else {
res.send('Hello World');
}
});
app.listen(3000, () => {
console.log('Server started')
});
我通过
tsx
运行的所有应用程序都会发生这种情况,尽管如果我运行普通节点应用程序说 node server.js
或者我使用 node dist/server.js
运行上述内容,并且使用少于 tsx
并且我不会退出内存错误。内存一般保持在200MB以下。
我尝试在命令和
--max-old-space-size=4096
环境变量中设置 NODE_OPTIONS
。
tsx 中的 Node v20.0.0 存在问题,这会导致内存泄漏,就像您所描述的那样。它已在 Node v20.1.0 中修复,因此您应该升级到该版本,或者最好升级到当前的长期支持版本(撰写本文时为 v22)。