1 错误日志
统一日志平台,对于频繁出现的错误日志应当引起警惕。需要结合产生的错误代码进行回溯确认是否是造成当前服务器不稳定的元凶。
2 系统指标
CPU & Memery
使用top命令来观察Node.js应用进程的CPU和Memery负载情况。
对于CPU高,需找到热点代码进行优化
对于Memery高,需找到内存泄漏地方
CPU指标
usr <= 70% , sys <= 35%, usr+ sys <= 70%
CPU参数
us: 用户占用CPU的百分比
sys: 内核和中断占用CPU的百分比
idle: CPU完全空闲的百分比
Memery指标
可用空间 >= 30%
Memery参数
used: 使用中的内存总量,指系统内核控制的内存数,纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还给free
free: 空闲的内存总量。
cache: 缓冲的内存总量
Disk磁盘占用率
使用df命令观察磁盘占用情况,当我们的日志/核心转储等大文件组件将磁盘打满时,Node.js应用很能无法正常运行
指标
Used < 80%
参数
Filesystem: 表示该文件系统位于哪一个分区,因此该列显示的是设备的名称
1K-block: 表设文件系统的总大小,默认是KB为单位
Used: 表示用掉的磁盘空间大小
Available: 表示剩余的磁盘空间大小
Used: 表示磁盘空间使用率
I/O负载
使用top, iostat 和 cat /proc/${pid}/io 来查看当前 I/O 负载
指标
%ioWait <20%
%iowait值过高,表示硬盘存在I/O瓶颈, %idle持续低于10%,那么系统CPU处理能力比较低,表明瓶颈在CPU
参数
cpu:
%user: CPU处在用户模式下的事件百分比
%nice: CPU处在nice值的用户模式下的时间百分比
%system: CPU处在系统模式下的时间百分比
%iowait: CPU等待输入输出完成时间百分比
%steal: 管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
%idle: CPU空闲百分比
吞吐量:
tps: 该设备每秒传输的次数
bkd_read/s: 每秒从设备读取的数据量
blk_wrtn/s: 每秒向设备写入的数据量
blk_read: 读取的总数量
blk_wrtn: 写的总数量
Network IO
TCP连接状态
可以使用netstat -ant 来确认TCP连接情况, 绝大部分Node.js应用实际上是web应用,每一个用户的连接都会创建一个Socket连接,在一些异常情况下(比如遭受半连接攻击或者内核参数不合理),服务器上会有大量TIME_WAIT状态的连接,而大量的TIME_WAIT积压会导致Node.js应用卡死(内核无法为新的请求分配新的TCP连接)
3 实践
请求慢
长时间TTFB
1 客户端到服务端之间的网络通信比较慢
2 带宽上限,高CPU,IOwait高,Recv-Q高,sql查询慢
-
内存溢出
参考:
https://github.com/aliyun-node/Node.js-Troubleshooting-Guide