高手问答第 230 期 —— Node.js 监控与调优

局长 发布于 08/05 15:40
阅读 15K+
收藏 14

“凡是能用 JavaScript 编写的应用,最终都会用 JavaScript 编写”,这条赫赫有名的「Atwood 定律」直白地道出了 JavaScript 的“无所不能”。

其中 Node.js 就是对这条定律的最好佐证,在 Node.js 出现之前,JavaScript 通常作为客户端程序设计语言使用,使用 JavaScript 编写的程序常在用户的浏览器上运行。Node.js 的出现使得 JavaScript 也能用于服务端编程。Node.js 含有一系列内置模块,大部分基本模块都用 JavaScript 编写,使得程序可以脱离 Apache HTTP Server 或 IIS,以作为独立服务器运行。

本期高手问答我们就一起来探讨关于 Node.js 的问题,做客高手问答的嘉宾是杜万智老师。

杜万智,前端技术专家,《Node.js开发实战》译者。在前端领域有多年开发与技术管理经验,擅长实时协作应用开发Node.js 监控前端优化等。目前任职于某外卖公司,负责办公协作平台前端。

问答主题:

  • Node.js 应用调优思路
  • Node.js 应用调优实践分享
  • Node.js 监控和调优的相关开源项目或工具推荐
  • ……

或有其他相关的问题,也欢迎提问。

为了鼓励踊跃提问,@局长 会在问答结束后从提问者中抽取 5 名幸运会员赠予《Node.js开发实战》一书。

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家向杜万智老师@0x11 积极提问,直接回帖提问即可。

加载中
0
局长
局长

高手问答第 230 期 —— Node.js 监控与调优
@js2java @ichord @koybe @lmrwork @CielSwift
恭喜以上五位网友或获得《Node.js开发实战》图书一本
请私信@局长 告知快递信息(格式:姓名+电话+地址)!

5G架构师
5G架构师
局长在吗? 我的书还没收到?麻烦帮我看看
1
ngpp
ngpp
您好,作为一门服务器端语言,node相比java具有哪些优势呢?在服务器安全性方面,是否会存在一下隐患?
0x11
0x11
企业开发需要对npm包的安全性做好监控,建议在CI上配置好npm audit,做好包的审计和准入。 Java的生态比较稳健,大家用的第三方包通常比较成熟,但问题也不少,像最近的fastjson远程代码执行漏洞等。 无论哪种都需要与安全团队合作做好监控
1
blu10ph
blu10ph

@0x11 您好,请问您在监控工具方面推荐什么工具?~

blu10ph
blu10ph
回复 @0x11 : 涨姿势了,感谢分享~
0x11
0x11
回复 @0x11 : 对于代码逻辑异常监控,Sentry是非常好的开源工具
0x11
0x11
建议除了监控通用指标以外,着重监控 GC、nodejs event loop lag以及一些异常和性能指标,像吞吐量、并发连接数等。工具可以关注pm2、appmetrics-dash之类的工具。商业方案想alinode也是挺好的选择
1
eechen
eechen

@0x11

Node.js已经发展10年多了,为什么Node.js还是没有一种方法来显式加载非缓存模块?

https://stackoverflow.com/questions/9210542/node-js-require-cache-possible-to-invalidate

这个StackOverflow问题的回答者中就有人提出"Node.js应该有一种方法来显式加载非缓存模块"的观点.
这种方法,在PHP里就是require,这也是为什么PHP会设计require和require_once的原因.
Node.js的require则类似PHP的require_once,要实现更新,需要手动删除cache.

 

eechen
eechen
回复 @xxx2xxx : 如果Node.js支持加载非缓存的模块,那实现局部代码热更新会更加方便,无需重启服务,修改即生效.
xxx2xxx
xxx2xxx
哪些场景要用到显式加载非缓存模块比较多的?
1
前端大师傅
前端大师傅

@0x11 你好!nodejs可否实现类似 fast-cgi方式进行访问。如把在nginx动态请求反向代理请求nodejs处理?

左华栋
左华栋
fast-cgi 的方式会降低性能。 一般做法是 node.js 监听 3000端口。 nginx 做 proxy_pass 反向代理到3000端口。 性能很好。
0
5G架构师
5G架构师

@0x11 java的监控Linux任务的项目,我也做过,请问Node.js 未来会代替 Java 或Python 吗 ?

0x11
0x11
Node.js、Java和Python都有各自适用的领域,目前Node.js大量用在Web的Render层(或者View层)、前端工具、IoT等。在企业应用开发领域Java生态非常成熟,并不需要完全替代谁。 技术选型上并不是非黑即白,可以百家争鸣。
robortly
robortly
会,极有可能超越,没可能完全替代。 因为:“凡是能用 JavaScript 编写的应用,最终都会用 JavaScript 编写”!
0
孤月蓝风
孤月蓝风

@0x11 作为前端技术专家,Node.js在前端的工作中所占的比重有多少呢?Node.js应用的调优与监控,与前端有强关联吗?

0x11
0x11
这是个好问题,看你怎么定义前端工作。技术专家需要扩展自己的技术深度和广度,我认为需要掌握这部分知识。 在考虑引入一个新的技术栈在生产环境前,一定要做好监控,只有监控做好了,才能感知到问题,进一步就需要调优了。
0
W一一W
W一一W

@0x11 对于吃CPU比较重的项目,用 Node怎么优化呢?或者说有没有什么好的方案。

W一一W
W一一W
回复 @0x11 : 感谢解惑
左华栋
左华栋
文中提的是优化方案,如果明白node.js 主线程是单线程,又有牛批的JIT的话,那么多线程对CPU密集型任务是有效果的。 如果对于一些特定算法或者有更高性能要求的话,可以写C艹或者 rust 拓展
半桶水_桶哥
半桶水_桶哥
回复 @0x11 : 呵呵~~ 没听说多进程或多线程能解决CPU密集型的问题,顶多也只能算是能利用多核而已。
0x11
0x11
得益于Node.js的事件机制,Node.js可以非常高效的响应IO请求。但并不擅长处理CPU消耗型任务。对此从0.12的时代大家就在用各种方式hack: 在C扩展中创建线程处理、多进程复制等。在Node.js 12中社区带来了 worker_threads 方案,非常值得了解https://nodejs.org/api/worker_threads.html
0
书生小兰
书生小兰
@0x11 尊敬的作者,nodejs适合做传统企业的项目吗?
左华栋
左华栋
不是一回事
书生小兰
书生小兰
@左华栋 ssr可以的
左华栋
左华栋
回复 @书生小兰 : 可以应付,开发成本低,性能更好一些。但是建议你用nest.js 或者 midwayjs 这类的AOP框架,很像spring
左华栋
左华栋
回复 @0x11 : 直接 nest.js
下一页
0
无聊的人啊
无聊的人啊
node12 上线是否意味着神经网络的发展进入正式阶段,或者说说node神经网络方面存在什么壁垒
左华栋
左华栋
科学计算,强类型 一直是弱项
0x11
0x11
Node.js只是一个工具,对于在神经网络领域的应用我个人并不了解。期待你分享
返回顶部
顶部