主编推荐语
本书系统讲解调试Node.js的8个方面,适合有开发经验的读者作为参考书。
内容简介
本书从CPU、内存、代码、工具、APM、日志、监控、应用这8个方面讲解如何调试 Node.js,大部分小节都会以一段经典的问题代码为例进行分析并给出解决方案。其中,第1章讲解CPU相关的知识,涉及各种CPU性能分析工具及火焰图的使用;第2章讲解内存相关的知识,例如Core Dump及如何分析 heapsnapshot文件;第3章讲解代码相关的知识,例如如何从代码层面避免写出难以调试的代码,并涉及部分性能调优知识;第4章讲解工具相关的知识,涉及常用的Node.js 调试工具和模块;第5章讲解APM(Application PerformanceManagement)相关的知识,例如两个不同的应用程序性能管理工具的使用;第6章讲解日志相关的知识,例如如何使用Node.js的async_hooks模块实现自动日志打点,并结合各种工具进行使用;第7章讲解监控相关的知识,例如如何使用Telegraf + InfluxDB + Grafana搭建一个完整的Node.js 监控系统;第8章讲解应用相关的知识,给出了两个完整的Node.js应用程序的性能解决方案。本书并不适合Node.js初学者,适合有一定Node.js开发经验的人阅读。笔者倾向于将本书定位成参考书,每一小节基本独立,如果遇到相关问题,则可以随时翻到相应的章节进行阅读。
目录
- 封面
- 版权页
- 前言
- 目录
- 第1章 CPU
- 1.1 理解perf与火焰图(FlameGraph)
- 1.1.1 perf
- 1.1.2 火焰图
- 1.1.3 红蓝差分火焰图
- 1.2 使用v8-profiler分析CPU的使用情况
- 1.3 Tick Processor及Web UI
- 1.3.1 Tick Processor
- 1.3.2 Web UI
- 第2章 内存
- 2.1 gcore与llnode
- 2.1.1 Core和Core Dump
- 2.1.2 gcore
- 2.1.3 llnode
- 2.1.4 测试Core Dump
- 2.1.5 分析Core文件
- 2.1.6--abort-on-uncaught-exception
- 2.1.7 小结
- 2.2 heapdump
- 2.2.1 使用heapdump
- 2.2.2 Chrome DevTools
- 2.2.3 对比快照
- 2.3 memwatch-next
- 2.3.1 使用memwatch-next
- 2.3.2 使用Heap Diff
- 2.3.3 结合heapdump使用
- 2.4 cpu-memory-monitor
- 2.4.1 使用cpu-memory-monitor
- 2.4.2 cpu-memory-monitor源码解读
- 第3章 代码
- 3.1 Promise
- 3.1.1 Promise/A+规范
- 3.1.2 从零开始实现Promise
- 3.1.3 Promise的实现原理
- 3.1.4 safelyResolveThen
- 3.1.5 doResolve和doReject
- 3.1.6 Promise.prototype.then和Promise.prototype.catch
- 3.1.7 值穿透
- 3.1.8 Promise.resolve和Promise.reject
- 3.1.9 Promise.all
- 3.1.10 Promise.race
- 3.1.11 代码解析
- 3.2 Async+Await
- 3.2.1 例1:async+await
- 3.2.2 例2:co+yield
- 3.2.3 例3:co+yield*
- 3.2.4 例4:co+bluebird
- 3.2.5 从yield转为yield*遇到的坑
- 3.2.6 async+bluebird
- 3.3 Error Stack
- 3.3.1 Stack Trace
- 3.3.2 Error.captureStackTrace
- 3.3.3 captureStackTrace在Mongolass中的应用
- 3.3.4 Error.prepareStackTrace
- 3.3.5 Error.prepareStackTrace的其他用法
- 3.3.6 Error.stackTraceLimit
- 3.3.7 Long Stack Trace
- 3.4 node@8
- 3.4.1 Ignition+Turbofan
- 3.4.2 版本的对应关系
- 3.4.3 try/catch
- 3.4.4 delete
- 3.4.5 arguments
- 3.4.6 async性能提升
- 3.4.7 不会优化的特性
- 3.5 Rust Addons
- 3.5.1 Rust
- 3.5.2 FFI
- 3.5.3 Neon
- 3.5.4 NAPI
- 3.6 Event Loop
- 3.6.1 什么是Event Loop
- 3.6.2 poll阶段
- 3.6.3 process.nextTick()
- 3.6.4 代码解析
- 3.7 处理uncaughtException
- 3.7.1 uncaughtException
- 3.7.2 使用llnode
- 3.7.3 ReDoS
- 第4章 工具
- 4.1 Source Map
- 4.1.1 uglify-es
- 4.1.2 TypeScript
- 4.1.3 source-map-support的高级用法
- 4.2 Chrome DevTools
- 4.2.1 使用Chrome DevTools
- 4.2.2 NIM
- 4.2.3 inspect-process
- 4.3 Visual Studio Code
- 4.3.1 基本调试
- 4.3.2 launch.json
- 4.3.3 技巧1——条件断点
- 4.3.4 技巧2——skipFiles
- 4.3.5 技巧3——自动重启
- 4.3.6 技巧4——对特定操作系统的设置
- 4.3.7 技巧5——多配置
- 4.3.8 总结
- 4.4 debug+repl2+power-assert
- 4.4.1 debug
- 4.4.2 repl2
- 4.4.3 power-assert
- 4.5 supervisor-hot-reload
- 4.5.1 Proxy
- 4.5.2 用Proxy实现Hot Reload
- 4.5.3 supervisor-hot-reload
- 4.5.4 内存泄漏问题
- 第5章 日志
- 5.1 koa-await-breakpoint
- 5.1.1 koa-await-breakpoint的实现原理
- 5.1.2 使用koa-await-breakpoint
- 5.1.3 自定义日志存储
- 5.2 使用async_hooks
- 5.3 ELK
- 5.3.1 安装ELK
- 5.3.2 使用ELK
- 5.4 OpenTracing+Jaeger
- 5.4.1 什么是OpenTracing
- 5.4.2 什么是Jaeger
- 5.4.3 启动Jaeger及Jaeger UI
- 5.4.4 使用OpenTracing及Jaeger
- 5.4.5 koa-await-breakpoint-jaeger
- 5.5 使用Sentry
- 第6章 APM
- 6.1 使用NewRelic
- 6.2 Elastic APM
- 6.2.1 什么是Elastic APM
- 6.2.2 启动ELK
- 6.2.3 启动APM Server
- 6.2.4 使用Elastic APM
- 6.2.5 错误日志
- 第7章 监控
- 7.1 Telegraf+InfluxDB+Grafana(上)
- 7.1.1 Telegraf(StatsD)+InfluxDB+Grafana简介
- 7.1.2 启动docker-statsd-influxdb-grafana
- 7.1.3 熟悉InfluxDB
- 7.1.4 配置Grafana
- 7.1.5 node-statsd
- 7.1.6 创建Grafana图表
- 7.1.7 模拟真实环境
- 7.2 Telegraf+InfluxDB+Grafana(下)
- 7.2.1 Grafana+ELK
- 7.2.2 监控报警
- 7.2.3 脚本一键生成图表
- 第8章 应用
- 8.1 使用node-clinic
- 8.2 alinode
- 8.2.1 什么是alinode
- 8.2.2 创建alinode应用
- 8.2.3 安装alinode
- 8.2.4 使用alinode诊断内存泄露
- 8.2.5 使用alinode诊断CPU性能瓶颈
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。