博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs真的是单线程吗?
阅读量:4071 次
发布时间:2019-05-25

本文共 768 字,大约阅读时间需要 2 分钟。

转载:http://liyangready.github.io/2015/08/14/nodejs真的是单线程吗?/

性能调优

说完了Node.js调试方面需要掌握的基本技能,下面说一下性能调优相关的技巧。 

Node.js相比Java、PHP这些老牌语言,基础设施还是有所欠缺的:比如性能分析和监控工具等,加上它的单线程运行特性,在大型应用中,很容易让系统的CPU、内存或者事件队列太满达到瓶颈,从而导致程序崩溃。一旦发现程序警报CPU负载过高,或者内存飙高时,我们该如何排查Node.js代码存在的问题呢?首先先分析一下问题。

内存持高存在的因素:

  • 缓存,很多人在code的时候把内存当缓存用,e.g. 使用js对象储存用户的session信息
  • 闭包,作用域长时间不能被释放掉
  • 生产者和消费者存在速度延迟,e.g. 数据库忙不过来,query队列堆积

CPU负载过高可能因素:

  • 垃圾回收频率过高、量太大,这一般是因为内存或者缓存暴涨导致的
  • 密集型的长循环计算,e.g. 大量遍历文件夹、大量计算等
  • 客户端并发数太大,e.g. 利用node作为socket服务端时,客户端连接数太大时,心跳处理也属于一次网络io,最终libuv转换成事件,严重影响业务消息发送

这些问题都是让人头疼的,一个项目几十上百个文件,收到这些警报如果没有经验,根本无从下手排查。

最直接的手段就是分析 GC 日志,因为程序的一举一动都会反馈到 GC 上,而上述问题也会一一指向 GC,如: 

内存暴涨,尤其是 Old Space 内存的暴涨,会直接导致 GC 的次数和时间增长 
缓存增加,导致 GC 的时间增加,无用遍历过多 
密集型计算,导致 GC Now Space次数增加

ps:阿里出了一套调优工具,看起来比较不错,感兴趣的童鞋可以试试,顺便反馈一下情况。

你可能感兴趣的文章
Java-IO-输入/输出流体系
查看>>
Java实现DES加密解密
查看>>
HTML基础
查看>>
Java IO
查看>>
Java NIO
查看>>
Java大数据:Hbase分布式存储入门
查看>>
Java大数据:全文搜索引擎Elasticsearch入门
查看>>
大数据学习:Hadoop入门学习书单
查看>>
大数据学习:Spark SQL入门简介
查看>>
大数据学习:Spark RDD操作入门
查看>>
大数据框架:Spark 生态实时流计算
查看>>
大数据入门:Hive和Hbase区别对比
查看>>
大数据入门:ZooKeeper工作原理
查看>>
大数据入门:Zookeeper结构体系
查看>>
大数据入门:Spark RDD基础概念
查看>>
大数据入门:SparkCore开发调优原则
查看>>
大数据入门:Java和Scala编程对比
查看>>
大数据入门:Scala函数式编程
查看>>
【数据结构周周练】002顺序表与链表
查看>>
C++报错:C4700:使用了非初始化的局部变量
查看>>