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

时间:2015-06-14 21:19:08

标签: node.js memory-leaks diagnostics

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

2 个答案:

答案 0 :(得分:1)

是的,IDDE不仅是内存泄漏检测的强大工具,而且是针对Node.js错误行为(包括崩溃和挂起)的各种问题确定。

以下是概述,安装和新信息的链接:https://www.ibm.com/developerworks/java/jdk/tools/idde

  1. 我将从nodeoverview命令开始。请注意,每个命令都以bang(!)开头,并且每个命令都是通过控件(ctrl + enter)输入的。
  2. !nodeoverview {

    堆和垃圾收集

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

    显示堆的占用情况。

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

      !jsmeminfo {

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

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

      0x00000000de06d319 FIXED_ARRAY_TYPE 131112!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_TYPE 15371393 FIXED_ARRAY_TYPE 6175379 ASCII_INTERNALIZED_STRING_TYPE 3476 BYTE_ARRAY_TYPE 1572 JS_FUNCTION_TYPE 1434

      }

    2. 根据这些信息查看应用程序,看看它们是否有合理的内存占用内存。

    3. 如果您想进一步“剖析”对象以查看内容,请使用对象扩展命令,例如!jsobject或!array:

      !array 0x00000000de06d319 {

      数组类型:FIXED_ARRAY_TYPE Len: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. 如果要根据对象的内部类型将整个堆“隔离”到用户jsgroupobjects中。当您以不同的时间间隔进行多次转储时,这会更有用,并希望比较哪些对象随时间增长。

      !jsgroupobjects {

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

      !jsobject 0x00000000c8244fd1 JS_OBJECT_TYPE 6133503对象0
      !jsobject 0x00000000c8004161 JS_OBJECT_TYPE 6133499数据库0
      !jsobject 0x00000000c8004101 JS_OBJECT_TYPE 3066750 MyRecord 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 pos 0x00001dfd00000000 SMI = 0x1dfd

      }

答案 1 :(得分:0)

模块https://www.npmjs.com/package/appmetrics但它更适用于监控和分析。 你可以看看它,它很有用。