Atitit 提升稳定性 错误处理 全局错误捕获

1.2. 可以uncaughtException来全局捕获未捕获的Error, 使用uncaughtException 2

1.2.1. 使用 try/catch 3

1.3. 守护NodeJS进程和记录错误日志 3

1.3.1. 使用node来守护node 4

1.3.2. 使用shell启动脚本守护node 4

2. 参考资料 6

2.1. Atitit.android崩溃日志 全局异常捕获机制.docx 6

2.2. atitit js浏览器环境下的全局异常捕获 v2 qa1 (2).docx 6

2.3. C# WinForm捕获全局异常 - 跟着阿笨一起玩.NET - 博客园.mhtml 6

/users/myinvation/5a96142c4431fe1878f66cf0/20276a9d1016c164cf840f3e3dd935f9

/users/userinfo/5a96142c4431fe1878f66cf0/20276a9d1016c164cf840f3e3dd935f9

1.1.1.1.1. 1、callback function

通过异步回调来处理异步操作可能是目前nodejs中使用最广泛的方案。通过约定回调函数中第一个参数,为error对象,来传递错误,当第一个参数为null时表示没有错误。为什么要这么做呢,因为异步中的错误是无法通过try catch捕获的。

2、我们上面的例子中演示的,不管采用那种方式,我们都不能处理异步中抛出的异常,异步中的异常只能通过传递来传递给调用者,所以,在异步中应该尽可能的少做逻辑,只是作为必要的操作等,比如,我们可以通过异步来获取数据,但数据的格式化等,则放到异步之外(也就是上面演示中的setTimeout之外),这样的话,绝大部分的异常都能被捕获,应用crash的几率也会大大的减少。

最后,尽管我们能捕获大部分错误,但是我们还是应该把捕获到的异常进行记录分析,尽可能减少异常,并且,通过完善的单元测试来事先发现问题。

1.1.1.1. 异步异常的特点

由于node的回调异步特性,无法通过try catch来捕捉所有的异常:

try {

process.nextTick(function () {

foo.bar();

});} catch (err) {

//can not catch it}

1.1.1.2. domain

在node v0.8+版本的时候,发布了一个模块domain。这个模块做的就是try catch所无法做到的:捕捉异步回调中出现的异常。

1.1. 可以uncaughtException来全局捕获未捕获的Error, 使用uncaughtException

我们可以uncaughtException来全局捕获未捕获的Error,同时你还可以将此函数的调用栈打印出来,捕获之后可以有效防止node进程退出,如:

process.on('uncaughtException', function (err) {
  //打印出错误
  console.log(err);
  //打印出错误的调用栈方便调试
  console.log(err.stack);
});

这相当于在node进程内部进行守护, 但这种方法很多人都是不提倡的,说明你还不能完全掌控Node.JS的异常。

1.1.1. 使用 try/catch

我们还可以在回调前加try/catch,同样确保线程的安全。

1.2. 守护NodeJS进程和记录错误日志

现在已经基本上解决了Node.JS因异常而崩溃的问题,不过任何平台都不是100%可靠的,还有一些错误是从Node底层抛出的,有些异常try/catch和uncaughtException都无法捕获。之前在运行ourjs的时侯,会偶尔碰到底层抛出的文件流读取异常,这就是一个底层libuv的BUG,node.js在0.10.21中进行了修复。

面对这种情况,我们就应该为nodejs应用添加守护进程,让NodeJS遭遇异常崩溃以后能马上复活。

另外,还应该把这些产生的异常记录到日志中,并让异常永远不再发生。

1.2.1. 使用node来守护node

node-forever 提供了守护的功能和LOG日志记录功能

1.2.2. 使用shell启动脚本守护node

使用node来守护的话资源开销可能会有点大,而且也会略显复杂,OurJS直接在开机启动脚本来进程线程守护。

如在debian中放置的 ourjs 开机启动文件: /etc/init.d/ourjs

这个文件非常简单,只有启动的选项,守护的核心功能是由一个无限循环 while true; 来实现的,为了防止过于密集的错误阻塞进程,每次错误后间隔1秒重启服务

//ati
 
 
process.on('uncaughtException', function (err) {
      console.log("********err ati start");
  //打印出错误
  
console.log(err);
  //打印出错误的调用栈方便调试
  
console.log(err.stack);
     console.log("********err ati end");
});

setTimeout(function () {
     throw "err2 from timeout";
 },15000);
setTimeout(function () {
 //   throw "err  from timeout aft 5 sec";
},5000);
console.log(" time out aft");
//atiend

如果fsr open page then timeouterr...can resume.....

If fst err time ot ,,then channel close...cant resume..

2. 参考资料

2.1. Atitit.android崩溃日志 全局异常捕获机制.docx

2.2. atitit js浏览器环境下的全局异常捕获 v2 qa1 (2).docx

2.3. C# WinForm捕获全局异常 - 跟着阿笨一起玩.NET - 博客园.mhtml

Atitit 提升稳定性 错误处理 全局错误捕获 1.2. 可以uncaughtException来全局捕获未捕获的Error, 使用uncaughtException 2 1.2.1. 使用 t相关推荐

  1. android捕获线程异常,android - 终结器引发的未捕获的异常:所有WebView方法必须在同一线程上调用。 (预期的Looper) - 堆栈内存溢出...

    我正在使用Admob SDK 18.1.1 并获得错误终结器抛出未捕获的异常 java.lang.RuntimeException: java.lang.Throwable: A WebView me ...

  2. php中的全局异常,PHP的全局错误处理详解

    本文目的 PHP的全局错误处理,在开发项目的时候很有用,可以帮助开发者快速定位一些问题,提高工作效率.默认情况下,全局错误会直接输出,但是最近开发时使用的一个框架库对全局错误处理进行了设定,导致很多错 ...

  3. java powershell出错_PowerShell全局错误处理机制处理脚本错误或异常

    类型:音频处理大小:1M语言:中文 评分:5.1 标签: 立即下载 没有任何脚本或程序能够保证在任何情况下毫无错误地执行,在外界条件变化的情况下,需要预防可能出错之处.本文将介绍PowerShell如 ...

  4. UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式

    UncaughtExceptionHandler:java未捕获的异常/错误 @(JAVA)[java] java有一部分异常属于运行时异常,这类异常发生时通过会导致程序发生错误,导致退出.如数据下标 ...

  5. Spring MVC集成测试:断言给定的模型属性有全局错误

    为了使用Bean验证报告Spring MVC中的全局错误,我们可以创建一个自定义的类级别约束注释. 全局错误与已验证Bean中的任何特定字段都不相关. 在本文中,我将展示如何使用Spring Test ...

  6. WinForm C#全局错误捕捉处理【整理】

    1 static class Program 2 { 3 /// <summary> 4 /// 应用程序的主入口点. 5 /// </summary> 6 [STAThrea ...

  7. 未捕获的错误:始终违反:元素类型无效:预期为字符串(对于内置组件)或类/函数,但得到了:对象

    本文翻译自:Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in ...

  8. Flex全局错误处理/Global Error Handling in AIR 2.0 and Flash 10.1

    Global Error Handling in AIR 2.0 and Flash 10.1 http://blogs.adobe.com/cantrell/archives/2009/10/glo ...

  9. NodeJS_08_art-template子模板与模板继承_MongoBooster_express-session_三大类中间件_全局错误处理

    NodeJS七天课程学习笔记_第8天 Blog综合案例 Blog 综合案例 (包含注册.登录.修改密码.注销.发布.分页列表.评论.个人中心.上传头像等) 课程内容概要: 1. 介绍art-templ ...

  10. C语言unprinctable错误,“未捕获错误:[$injector:unpr]”,部署后角度

    I have a fairly simple Angular application that runs just fine on my dev machine, but is failing wit ...

最新文章

  1. idea本地跑如何看gc日志_不可思议,竟然还有人不会查看GC垃圾回收日志?
  2. cpu内存调度python_Python/Pycharm内存和CPU分配以提高运行速度?
  3. 线程创建后,立刻调用CloseHandle的原因
  4. Springboot2.1.3 + redis 实现 cache序列化乱码问题
  5. ng build --prod --aot打包Angluar4项目报javaScript heap out of memory,内存溢出
  6. word-vba-microsoft(中英文)
  7. oracle linux hugepage,LInux下为什么配置HugePages及配置步骤
  8. 【原创】SM4password算法源代码接口具体解释
  9. git 暂存文件操作 stash
  10. Origin 2017安装教程(附有下载链接)
  11. 训练好caffemodel后,提取人脸图片的特征向量
  12. 一些常用外设DHT11,sg90
  13. mybatis-plus 多条件下关键字查询
  14. 《摩根写给儿子的32封信》 03 企业家的资质
  15. 负载阻抗、感抗、容抗
  16. 如何在庞大的ip地址库中快速定位到对应的ip地址所对应的归属地?
  17. 1.2 控制LED闪烁
  18. oracle.-904,ORACLE 11G ORA-904 while running select query(BUG)
  19. 有道笔记在Ubuntu上的安装
  20. 服务器任务栏运行程序不见了,Win7系统任务栏上正在运行的程序图标不见了怎么办...

热门文章

  1. arcgis交通可达性分析步骤_可达性分析(二):基于Network Analys的服务区分析
  2. python可视化迷宫求解_用python求解迷宫
  3. 电子科大考研计算机考研经验,电子科技大学
  4. 20172304 《程序设计与数据结构》 第一周学习总结
  5. Bootloader - main system - Recovery的三角关系【转】
  6. Eclipse·Maven·构建SpringMVC简单工程-2
  7. 在单链表中删除指定值的节点
  8. 伯克利的云计算报告(中)
  9. 《JavaScript权威指南》读书笔记一
  10. js代码格式化工具(简单格式化,显示进度条)