[求助] 请教一个关于 Nodejs 运行时崩溃 的问题
[求助] 请教一个关于 Nodejs 运行时崩溃 的问题
服务器迁移,重新部署生产环境,结果运行不了…
运行环境 Centos7
已经确认的:
- 不是端口占用问题
- 不是 node.js 版本问题,和本地版本保持一致,也重装过一次
- 重新 npm install 也不行,尝试过的命令如下(顺序执行):
rm -rf node_modules
rm package-lock.json
npm cache clear --force
npm install
搜索引擎查了一晚上无果,只能来请教 V2EX 的各位了,谢谢各位。
error↓
[root[@akebono](/user/akebono) mapshare_server]# npm start
> [email protected] start /mapshare_server
> nodemon --watch src -e ts,tsx --exec ts-node src/server.ts
[nodemon] 2.0.12
[nodemon] to restart at any time, enter rs
[nodemon] watching path(s): src/**/*
[nodemon] watching extensions: ts,tsx
[nodemon] starting ts-node src/server.ts
Error: Cannot find module ‘sha1’
Require stack:
- /mapshare_server/src/controllers/share.ts
- /mapshare_server/src/routes.ts
- /mapshare_server/src/server.ts
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/mapshare_server/src/controllers/share.ts:4:14)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Module.m._compile (/mapshare_server/node_modules/ts-node/src/index.ts:858:23)
at Module._extensions…js (internal/modules/cjs/loader.js:1092:10)
at Object.require.extensions.<computed> [as .ts] (/mapshare_server/node_modules/ts-node/src/index.ts:861:12)
at Module.load (internal/modules/cjs/loader.js:928:32)
[nodemon] app crashed - waiting for file changes before starting…
lock 文件为什么要删除????
lock 文件不删试试
lock 文件不要删除。
看错误提示就是找不到 sha1
这个模块,是不是旧机器装到系统全局位置里去了,要不就搜代码哪个模块依赖了。或者碰运气 npm install sha1 试下。
lock 不能删的,删掉是为了干干净净的重装
如果 sha1 安装了,估计就是 /mapshare_server/src/controllers/share.ts ,/mapshare_server/src/routes.ts ,/mapshare_server/src/server.ts 这三个的引用路径的问题,检查一下每个 import 语句的路径是不是绝对路径,尝试改成相对路径。多问一句,本地和正式的启动命令一样吗?
关于Node.js运行时崩溃的问题,通常涉及多种可能的原因,包括内存泄漏、未捕获的异常、系统资源限制等。以下是一些常见的排查步骤和示例代码,帮助你定位和解决崩溃问题。
-
捕获未处理的异常: 确保你的Node.js应用能够捕获并处理未处理的异常,防止进程崩溃。
process.on('uncaughtException', (err) => { console.error('Uncaught Exception:', err); process.exit(1); // 优雅地退出进程 }); process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); process.exit(1); });
-
内存泄漏检测: 使用工具如
heapdump
和Chrome DevTools
来分析内存使用情况,查找内存泄漏。npm install heapdump
然后在代码中添加生成堆快照的逻辑。
-
监控和日志: 增强应用的日志记录,记录关键操作和错误,便于回溯问题。
-
资源限制: 检查系统的资源限制,如文件描述符数量、内存限制等,确保Node.js进程有足够的资源运行。
-
调试工具: 使用Node.js内置的调试工具或第三方工具如
node-inspector
,进行断点调试,查找崩溃点。
如果上述方法仍无法解决问题,建议提供崩溃时的错误日志和代码片段,以便进一步分析。