Node.js 应用程序可以使用哪些诊断工具?

What diagnostic tools are available for Node.js applications?

有很多工具,哪些诊断工具适合诊断 node.js 应用程序的内存泄漏问题?

是的,IDDE 是一个强大的工具,不仅用于内存泄漏检测,而且用于确定 Node.js 不当行为的各种问题,包括崩溃和挂起。

这里是 link 概述、安装和新信息:https://www.ibm.com/developerworks/java/jdk/tools/idde

  1. 我将从 nodeoverview 命令开始。请注意,每个命令都以爆炸 (!) 开头,并且出于某种原因,每个命令都使用控件 (ctrl+enter) 输入。

!nodeoverview {

堆和垃圾收集

内存分配器,已用:981 MB,可用:482 MB GC 计数:144

这显示了堆的占用情况。

  1. 然后,使用jsmeminfo找出堆中主要的驻留对象。

    !jsmeminfo {

    内存分配器,已用:981 MB,可用:482 MB 堆对象总数:21559924

    最大的 5 个堆对象类型大小(字节)更多信息


    0x00000000de06d319 FIXED_ARRAY_TYPE131112 !array 0x00000000de06d319 0x00000000de0ac6d9 FIXED_ARRAY_TYPE 98360 !array 0x00000000de0ac6d9 0x00000000e90e2f09 ASCII_STRING_TYPE 48152 !string 0x00000000e90e2f09 0x00000000e9035099 ASCII_STRING_TYPE 48088 !string 0x00000000e9035099 0x00000000e9004101 ASCII_STRING_TYPE 40936 !string 0x00000000e9004101

    最常见的 5 种对象类型频率


    JS_OBJECT_TYPE15371393 FIXED_ARRAY_TYPE6175379 ASCII_INTERNALIZED_STRING_TYPE3476 BYTE_ARRAY_TYPE1572 JS_FUNCTION_TYPE1434

    }

  2. 根据此信息查看应用程序,看看他们占用内存是否合理。

  3. 如果要'dissect'对象进一步查看内容,使用对象扩展命令,例如!jsobject或!array:

    !array 0x00000000de06d319 {

    数组类型:FIXED_ARRAY_TYPE 长度:16387 仅显示前 100 个元素 0:0xd9400000000(SMI) 1:0x3fe00000000(SMI) 2:0x400000000000(SMI) 3 : 0x9a1103d1 (ASCII_INTERNALIZED_STRING_TYPE : !print 0x000000009A1103D1 ) 4 : 0x9a1042a9 (ASCII_INTERNALIZED_STRING_TYPE : !print 0x000000009A1042A9 ) ... }

  4. 如果你想'segregate'根据对象的内部类型将整个堆分成多个部分,用户jsgroupobjects。当您在不同的时间间隔进行了多次转储,并且想要比较哪些对象随时间增长时,这会更有用。

    !jsgroupobjects {

    代表对象地址对象类型数量对象构造函数数量属性属性


    !jsobject 0x00000000c8244fd1 JS_OBJECT_TYPE 6133503 对象 0
    !jsobject 0x00000000c8004161 JS_OBJECT_TYPE 6133499 数据库 0
    !jsobject 0x00000000c8004101 JS_OBJECT_TYPE 3066750 我的记录 0
    !jsobject 0x00000000c869b111 JS_OBJECT_TYPE 37302 对象 0
    !jsobject 0x00000000de05b959 JS_FUNCTION_TYPE 542 0
    !jsobject 0x00000000de04bcc1 JS_FUNCTION_TYPE 267 0
    !jsobject 0x00000000de04aa09 JS_FUNCTION_TYPE 251 0
    !jsobject 0x00000000de04a911 JS_FUNCTION_TYPE 227 0
    !jsobject 0x00000000de0a48c9 JS_ARRAY_TYPE 190 数组 0
    !jsobject 0x00000000de04a7e9 JS_FUNCTION_TYPE 102 0
    !jsobject 0x00000000de04e379 JS_ARRAY_TYPE 34 数组 0
    !jsobject 0x00000000de050db1 JS_OBJECT_TYPE 30 对象 0
    !jsobject 0x00000000c2938151 JS_REGEXP_TYPE 18 RegExp 0
    !jsobject 0x00000000c2955a11 JS_OBJECT_TYPE 15 NativeModule 0
    !jsobject 0x00000000c2944519 JS_OBJECT_TYPE 11 对象 0
    !jsobject 0x00003abc617bee71 JS_OBJECT_TYPE 102 CallSite 3 接收器,乐趣,pos

  5. 如果要检查单个对象,请在对象地址上执行 jsobject。

    !jsobject 0x00003abc617bee71 {

    对象具有快速属性 描述符数量:3

    名称值更多信息


    接收器 0x0000251abe506c91
    有趣的 0x00003abc617bb241 位置 0x00001dfd00000000 SMI = 0x1dfd

    }

module https://www.npmjs.com/package/appmetrics 但更多的是用于监控和分析。 你可以看看,很有用