Node系列——Node系列中异常捕获的一个重要思考
2015-08-28 00:00
585 查看
摘要: 这是从网上摘抄的一些文章
无论是通过
但这里需要澄清一些事实。JS本身的
因此,使用
我们通过中间件的形式,引入domain来处理异步中的异常。当然,domain虽然捕捉到了异常,但是还是由于异常而导致的堆栈丢失会导致内存泄漏,所以出现这种情况的时候还是需要重启这个进程的,有兴趣的同学可以去看看domain-middleware这个domain中间件。
无论是通过
process对象的
uncaughtException事件捕获到全局异常,还是通过子域对象的
error事件捕获到了子域异常,在NodeJS官方文档里都强烈建议处理完异常后立即重启程序,而不是让程序继续运行。按照官方文档的说法,发生异常后的程序处于一个不确定的运行状态,如果不立即退出的话,程序可能会发生严重内存泄漏,也可能表现得很奇怪。
但这里需要澄清一些事实。JS本身的
throw..try..catch异常处理机制并不会导致内存泄漏,也不会让程序 的执行结果出乎意料,但NodeJS并不是存粹的JS。NodeJS里大量的API内部是用C/C++实现的,因此NodeJS程序的运行过程中,代码执 行路径穿梭于JS引擎内部和外部,而JS的异常抛出机制可能会打断正常的代码执行流程,导致C/C++部分的代码表现异常,进而导致内存泄漏等问题。
因此,使用
uncaughtException或
domain捕获异常,代码执行路径里涉及到了C/C++部分的代码时,如果不能确定是否会导致内存泄漏等问题,最好在处理完异常后重启程序比较妥当。而使用
try语句捕获异常时一般捕获到的都是JS本身的异常,不用担心上诉问题。
我们通过中间件的形式,引入domain来处理异步中的异常。当然,domain虽然捕捉到了异常,但是还是由于异常而导致的堆栈丢失会导致内存泄漏,所以出现这种情况的时候还是需要重启这个进程的,有兴趣的同学可以去看看domain-middleware这个domain中间件。
相关文章推荐
- Node系列——Node中的异常处理。
- node.js
- HDU 4587 TWO NODES(割点,连通块,枚举)
- NodeJS优缺点及适用场景讨论
- Leetcode 222 Count Complete Tree Nodes 完全二叉树的结点数
- Merge Two Sorted Lists
- downgrade node homebrew
- 关于《Node.js 包教不包会》中cookie 与 session的补充
- Ubuntu下搭建NodeJS+Express WEB开发框架
- npm WARN uninstall not installed in /Users/hrt0kmt/node_modules: "xxx"
- Name node is in safe mode.错误处理方式 hadoop
- 导航原理实验系统软件——node-webkit初探
- nodejs实现接收Snmp的Trap消息
- NodeJs 基础知识
- Hadoop错误8_dfsadmin -report后livenodes为0 或 报错could only be replicated to 0 nodes, instead of 1
- 关于Nodejs的多进程模块Cluster
- nodejs初印象
- node schedule 使用
- Nodejs中cluster模块的多进程共享数据问题
- Leetcode #237 Delete Node in a Linked List