市面上成熟的 Node.js 性能监控系统,监控的指标有很多. 以开源的 Easy-Monitor 为例,在系统监控一栏中,指标包括内存.CPU.GC.进程.磁盘等. 这些系统能全方位的监控着应用的一举一动,并且可以提供安全提醒.在线分析.导出真实状态等服务. 本专题分为上下两个篇章,会简单分析下在 Node.js 环境中的几个资源瓶颈,包括CPU .内存和进程奔溃,并且会给出相应的监控方法. 本系列所有的示例源码都已上传至Github,点击此处获取. 一.CPU 在 Linux 系统中,可以通…
本节会重点分析内存和进程奔溃,并且会给出相应的监控方法. 本系列所有的示例源码都已上传至Github,点击此处获取. 一.内存 虽然在 Node.js 中并不需要手动的对内存进行分配和销毁,但是在开发中因为程序编写问题也会发生内存泄漏的情况. 所以还是有必要了解一些 Node.js 开放的内存操作和常见的内存泄漏场景. 1)内存指标 Node.js 项目在启动后(例如 node index.js),会创建一个服务进程.进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度…
虽然 Node.js 是单线程的,但是在融合了libuv后,使其有能力非常简单地就构建出高性能和可扩展的网络应用程序. 下图是 Node.js 的简单架构图,基于 V8 和 libuv,其中 Node Bindings 为 JavaScript 和 C++ 搭建了一座沟通的桥梁,使得 JavaScript 可以访问 V8 和 libuv 向上层提供的 API. 本系列所有的示例源码都已上传至Github,点击此处获取. 一.术语解析 接下来会对几个与 Node.js 相关的术语做单独的解析,其中…
Events 是 Node.js 中最重要的核心模块之一,很多模块都是依赖其创建的,例如上一节分析的流,文件.网络等模块. 比较知名的 Express.KOA 等框架在其内部也使用了 Events 模块. Events 模块提供了EventEmitter类,EventEmitter 也叫事件触发器,是一种观察者模式的实现. 观察者模式是软件设计模式的一种,在此模式中,一个目标对象(即被观察者对象)管理所有依赖于它的观察者对象. 当其自身状态发生变化时,将以广播的方式主动发送通知(在通知中可携带一…
HTTP(HyperText Transfer Protocol)即超文本传输协议,是一种获取网络资源(例如图像.HTML文档)的应用层协议,它是互联网数据通信的基础,由请求和响应构成. 在 Node.js 中,提供了 3 个与之相关的模块,分别是 HTTP.HTTP2 和 HTTPS,后两者分别是对 HTTP/2.0 和 HTTPS 两个协议的实现. HTTP/2.0 是 HTTP/1.1 的扩展版本,主要基于 Google 发布的 SPDY 协议,引入了全新的二进制分帧层,保留了 1.1 版…
文件系统是一种用于向用户提供底层数据访问的机制,同时也是一套实现了数据的存储.分级组织.访问和获取等操作的抽象数据类型. Node.js 中的fs模块就是对文件系统的封装,整合了一套标准 POSIX 文件 I/O 操作的集合,包括文件的读写.删除.遍历.重命名等操作. fs 模块中的所有方法都提供了三种形式:回调.同步和 Promise ,其中 Promise 是在 Node.js 的版本 10 中引入的. 本系列所有的示例源码都已上传至Github,点击此处获取. 一.三种形式 在回调形式的方…
在 Node.js 中,提供了console模块,这是一个简单的调试控制台,其功能类似于浏览器提供的 JavaScript 控制台. 本系列所有的示例源码都已上传至Github,点击此处获取. 一.原理 与浏览器一样,Node.js 也提供了一个全局变量 console(实例化 Console 类),可调用 log().error() 等方法. 1)同步还是异步 console 的方法既不像浏览器中那样始终同步,也不像 Node.js 中的流那样始终异步. 是否为同步取决于链接的是什么流以及操作…
Socket.IO 是一个建立在 WebSocket 协议之上的库,可以在客户端和服务器之间实现低延迟.双向和基于事件的通信. 并且提供额外的保证,例如回退到 HTTP 长轮询.自动重连.数据包缓冲.多路复用等. WebSocket 是一种基于 TCP 协议在服务器和浏览器之间提供全双工和低延迟通道的通信协议. 注意,Socket.IO 不是 WebSocket 的实现.尽管 Socket.IO 确实在可能的情况下使用 WebSocket 进行传输,但它为每个数据包添加了额外的元数据. 这就是为…
写好代码,花钱买了VPS,看着Charges一直上涨却无从下手?记一位新手司机从购买VPS到成功访问的过程 0.购买VPS 首先,选择VPS提供商,部署一个新的服务器(Deploy New Server),我使用的是Vultr提供的VPS 操作系统可以自由选择,我这边使用的是CentOS 7,选择其他操作系统的胖友可以搜一下相应操作系统的部署教程 1.使用PuTTY连接远程VPS 安装PuTTY 打开PuTTY,在 Host Name(or IP address) 那一栏填上VPS提供商给你的I…
一:自己这段时间经常要用到Base64编码和URL编码,写个编译型语言有点麻烦干脆就用node.js弄了个,弄好后在/etc/profile里加上alias就能完成工具的配置,先上代码: function Base64() { if(typeof Base64._initialized == "undefined"){ _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=&qu…