iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么解决NodeJS服务总是崩溃的问题
  • 226
分享到

怎么解决NodeJS服务总是崩溃的问题

2023-06-14 12:06:45 226人浏览 薄情痞子
摘要

这篇文章主要介绍了怎么解决nodejs服务总是崩溃的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。许多人都有这样一种映像,nodejs比较快; 但是因为其是单线程,所以它

这篇文章主要介绍了怎么解决nodejs服务总是崩溃的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

许多人都有这样一种映像,nodejs比较快; 但是因为其是单线程,所以它不稳定,有点不安全,不适合处理复杂业务; 它比较适合对并发要求比较高,而且简单的业务场景。

事实上NodeJS里程确实有“脆弱”的一面,单线程的某处产生了“未处理的”异常确实会导致整个node.js的崩溃退出,来看个例子, 这里有一个node-error.js的文件:

var Http = require('http');var server = http.createServer(function (req, res) {  //这里有个错误,params 是 undefined  var ok = req.params.ok;  res.writeHead(200, {'Content-Type': 'text/plain'});  res.end('Hello World');});server.listen(8080, '127.0.0.1');console.log('Server running at http://127.0.0.1:8080/');

启动服务,并在地址栏测试一下发现 http://127.0.0.1:8080/  不出所料,node崩溃了

$ node node-errorServer running at http://127.0.0.1:8080/c:GitHubscriptode-error.js:5  var ok = req.params.ok;                     ^TypeError: Cannot read property 'ok' of undefined    at Server.<anonymous> (c:githubscriptode-error.js:5:22)    at Server.EventEmitter.emit (events.js:98:17)    at HTTPParser.parser.onIncoming (http.js:2108:12)    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23)    at Socket.socket.ondata (http.js:1966:22)    at tcp.onread (net.js:525:27)

怎么解决呢?

其实Node.JS发展到今天,如果连这个问题都解决不了,那估计早就没人用了。

使用uncaughtException

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

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

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

使用 try/catch

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

var http = require('http');http.createServer(function(req, res) {  try {    handler(req, res);  } catch(e) {    console.log('', e, '', e.stack);    try {      res.end(e.stack);    } catch(e) { }  }}).listen(8080, '127.0.0.1');console.log('Server running at http://127.0.0.1:8080/');var handler = function (req, res) {  //Error Popuped  var name = req.params.name;  res.writeHead(200, {'Content-Type': 'text/plain'});  res.end('Hello ' + name);};

这种方案的好处是,可以将错误和调用栈直接输出到当前发生的网页上。

集成到框架

标准的HTTP响应处理会经历一系列的Middleware(HttpModule),最终到达Handler,如下图所示:

怎么解决NodeJS服务总是崩溃的问题


这 些Middleware和Handler在NodeJS中都有一个特点,他们都是回调函数,而回调函数中是唯一会让Node在运行时崩溃的地方。根据这个 特点,我们只需要在框架中集成一处try/catch就可以相对完美地解决异常问题,而且不会影响其它用户的请求request。

事实上现在的NodeJS WEB框架几乎都是这么做的,如 OurJS开源博客所基于的 WebSvr

就有这么一处异常处理代码:

Line: 207  try {    handler(req, res);  } catch(err) {    var errORMsg      = ''      + 'Error ' + new Date().toISOString() + ' ' + req.url      + ''      + err.stack || err.message || 'unknow error'      + ''      ;    console.error(errorMsg);    Settings.showError      ? res.end('<pre>' + errorMsg + '</pre>')      : res.end();  }

那么不在回调中产生的错误怎么办?不必担心,其实这样的node程序根本就起不起来。

此外node自带的 cluster 也有一定的容错能力,它跟Nginx的worker很类似,但消耗资源(内存)略大,编程也不是很方便,OurJS并没有采用此种设计。

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

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

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

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

使用node来守护node

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

安装非常容易

[sudo] npm install forever

使用也很简单

$ forever start simple-server.js$ forever list  [0] simple-server.js [ 24597, 24596 ]

还可以看日志

forever -o out.log -e err.log my-script.js

使用shell启动脚本守护node

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

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

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

WEB_DIR='/var/www/ourjs'WEB_APP='svr/ourjs.js'#location of node you want to useNODE_EXE=/root/local/bin/nodewhile true; do    {        $NODE_EXE $WEB_DIR/$WEB_APP config.magazine.js        echo "Stopped unexpected, restarting "    } 2>> $WEB_DIR/error.log    sleep 1done

错误日志记录也非常简单,直接将此进程控制台当中的错误输出到error.log文件即可: 2>> $WEB_DIR/error.log  这一行, 2 代表 Error。

感谢你能够认真阅读完这篇文章,希望小编分享的“怎么解决NodeJS服务总是崩溃的问题”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: 怎么解决NodeJS服务总是崩溃的问题

本文链接: https://www.lsjlt.com/news/270896.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么解决NodeJS服务总是崩溃的问题
    这篇文章主要介绍了怎么解决NodeJS服务总是崩溃的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。许多人都有这样一种映像,NodeJS比较快; 但是因为其是单线程,所以它...
    99+
    2023-06-14
  • tomcat崩溃问题怎么解决
    Tomcat崩溃问题可能是由于多种原因引起的,包括配置错误、内存不足、线程死锁等。以下是一些可能的解决方法:1. 检查Tomcat的...
    99+
    2023-09-12
    tomcat
  • Linux系统崩溃问题怎么解决
    这篇文章主要介绍“Linux系统崩溃问题怎么解决”,在日常操作中,相信很多人在Linux系统崩溃问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统崩溃问题怎么解决”的疑惑有所帮助!接下来...
    99+
    2023-06-13
  • 腾讯云服务器崩溃怎么办解决不了问题
    1. 确认问题 首先,当腾讯云服务器崩溃时,需要确认问题的具体原因。这可能需要检查服务器的日志文件或与腾讯云技术支持联系。确定问题后,可以采取以下措施来解决问题。 2. 重启服务器 如果服务器崩溃是由于软件问题引起的,那么重启服务器可能会...
    99+
    2023-10-26
    腾讯 服务器
  • 如何解决腾讯云服务器崩溃问题
    1. 确认服务器是否真的崩溃 在处理服务器崩溃问题之前,首先需要确认服务器是否真的崩溃了。可以通过以下几种方式来确认: 尝试通过 SSH 连接服务器,如果连接失败,则可能是服务器崩溃了。 查看服务器的监控数据,如果 CPU 使用率、内存...
    99+
    2023-10-26
    腾讯 如何解决 服务器
  • 服务器网站崩溃怎么解决
    服务器网站崩溃的解决方法:1、启用检测病毒软件,加强安全防范措施;2、将被攻击的服务器等设备从网络中隔离,同时联系技术人员进行被破坏系统的恢复与重建工作;3、对数据进行两个以上的备份,以免导致数据库不可恢复性破坏。具体内容如下:启用检测病毒...
    99+
    2024-04-02
  • 如何解决使Eclipse崩溃的JVM terminated问题
    这期内容当中小编将会给大家带来有关如何解决使Eclipse崩溃的JVM terminated问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。本文将介绍如何解决JVM terminated令Eclipse...
    99+
    2023-06-17
  • 怎么解决CSS崩溃的父母有浮动子女问题
    本篇内容介绍了“怎么解决CSS崩溃的父母有浮动子女问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 答...
    99+
    2024-04-02
  • 腾讯云服务器崩溃怎么解决的
    如果您的腾讯云服务器出现服务器崩溃的情况,可能会导致您无法访问互联网或其他资源。这可能是由于以下原因造成的: DNS解析错误:腾讯云服务器可能会将域名转换为与您当前使用的DNS服务器不匹配的IP地址,这可能导致您无法访问互联网或其他网站...
    99+
    2023-10-26
    腾讯 服务器
  • 腾讯云服务器崩溃怎么解决
    如果您的腾讯云服务器出现服务器崩溃的情况,可能会导致您无法访问互联网或其他资源。解决服务器崩溃问题的常见步骤如下: 立即联系腾讯云官方技术支持团队,他们会协助您解决服务器崩溃问题。 检查网络连接是否正常,确保网络连接正常,可以尝试使用其...
    99+
    2023-10-26
    腾讯 服务器
  • 亚马逊服务器崩溃怎么解决的
    检查配置:检查服务器的配置是否正确,确保所有软件和应用程序都是最新的,并且所有服务都是可用的。 更新补丁:确保所有软件和应用程序都已更新到最新版本。如果您已经使用了最新版本,那么就不需要进行任何更改。 检查硬件:确保服务器的硬件正常运行,...
    99+
    2023-10-27
    亚马逊 服务器
  • Android如何解决WebView多进程崩溃的问题
    小编给大家分享一下Android如何解决WebView多进程崩溃的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题在android 9.0系统上如果多个进程...
    99+
    2023-06-14
  • 腾讯云服务器崩溃怎么解决的呢
    检查服务器的配置文件:你可以使用VIM或者Git命令来检查服务器的配置文件,确保它们是正确的。 检查网络连接:如果服务器配置在公共网络上,那么你可以尝试使用其他设备或者第三方网络工具来测试服务器是否工作正常。 清除浏览器缓存:你可以使用3...
    99+
    2023-10-27
    腾讯 服务器
  • 亚马逊云服务器崩溃怎么解决
    以下是一些可能的解决方案: 监控服务器状态:定期监控服务器的状态,例如温度、CPU、内存、磁盘空间等,以便及时发现问题并采取措施解决。 升级硬件:如果硬件无法提供足够的资源,则需要升级硬件以提供更高的性能和更大的内存。 配置防火墙规则:...
    99+
    2023-10-27
    亚马逊 服务器
  • 腾讯云服务器崩溃怎么办解决
    在解决腾讯云服务器崩溃问题时,首先需要考虑的是如何确定问题的原因。一些常见的原因包括操作系统、应用程序、配置错误、网络连接等。对于操作系统问题,可以通过升级系统版本、修复漏洞等方式来解决。对于应用程序问题,可以通过检查代码、清除缓存等方式来...
    99+
    2023-10-28
    腾讯 服务器
  • 亚马逊服务器崩溃了怎么解决
    1. 确认服务器是否真的崩溃了 在处理服务器崩溃问题之前,首先需要确认服务器是否真的崩溃了。可以通过以下几种方式来确认: 尝试访问服务器上的网站或应用程序,如果无法访问,则可能是服务器崩溃了。 登录服务器并检查系统日志,查看是否有任何错...
    99+
    2023-10-27
    亚马逊 服务器 崩溃了
  • 腾讯云服务器崩溃怎么办解决了
    1. 确认服务器是否真的崩溃了 在处理服务器崩溃问题之前,首先需要确认服务器是否真的崩溃了。可以通过以下几种方式来确认: 尝试通过 SSH 连接服务器,如果无法连接,说明服务器可能已经崩溃。 尝试通过控制台或者远程桌面连接服务器,如果无...
    99+
    2023-10-26
    腾讯 解决了 服务器
  • 阿里云服务器崩溃?微博怎么解决?
    阿里云服务器是许多企业和个人的重要工具,但有时可能会出现服务器崩溃的问题,这可能会导致业务中断和数据丢失。本文将详细介绍如何解决阿里云服务器崩溃的问题,以及在微博上如何进行操作。 一、阿里云服务器崩溃的原因及解决方法阿里云服务器崩溃的原因有...
    99+
    2023-12-10
    阿里 服务器
  • 存储raid崩溃的解决方案是什么
    本篇文章为大家展示了存储raid崩溃的解决方案是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。某公司采用raid5磁盘阵列,由于未知的原因导致存储忽然崩溃无法启动,raid5阵列中的虚拟机全部丢...
    99+
    2023-06-04
  • 香港阿里云服务器崩溃原因有哪些问题和解决
    硬件故障:香港服务器可能会出现硬件故障,例如服务器硬盘损坏、网络故障、内存故障等。这些故障可能会导致服务器无法正常启动,并且可能会导致数据丢失或者系统崩溃。 软件问题:香港服务器可能会运行的软件不兼容或者版本不兼容导致服务器崩溃。例如,如...
    99+
    2023-10-27
    阿里 香港 原因
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作