【问题标题】:What diagnostic tools are available for Node.js applications?哪些诊断工具可用于 Node.js 应用程序?
【发布时间】:2015-08-30 07:52:33
【问题描述】:

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

【问题讨论】:

  • 我正在使用的一个工具是 IBM Interactive Diagnostic Data Explorer 工具 (IDDE)。基本上,如果我怀疑随着时间的推移应用程序中存在一些泄漏。我将随时间对 node.js 进程的核心转储进行不同的快照,然后使用 IDDE 命令行工具分析核心转储。他们也有 Eclipse 基础 GUI 版本。
  • 什么命令有用?
  • 我发现这个命令 jsmeminfo 非常有用。 jsmeminfo 将显示 5 个大堆对象

标签: node.js memory-leaks diagnostics


【解决方案1】:

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

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

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

!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 !字符串 0x00000000e90e2f09 0x00000000e9035099 ASCII_STRING_TYPE 48088 !字符串 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 号码:16387 仅显示前 100 个元素 0:0xd9400000000(SMI) 1 : 0x3fe00000000 (SMI) 2:0x400000000000(SMI) 3:0x9a1103d1(ASCII_INTERNALIZED_STRING_TYPE:!打印 0x000000009A1103D1) 4:0x9a1042a9(ASCII_INTERNALIZED_STRING_TYPE:!打印 0x000000009A1042A9) ... }

  4. 如果您想根据对象的内部类型将整个堆“隔离”为多个部分,请使用 jsgroupobjects。当您在不同的时间间隔进行多次转储并想要比较哪些对象随时间增长时,这会更有用。

    !jsgroupobjects {

    代表对象地址对象类型Num Objects Constructor Num Properties Properties


    !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 正则表达式 0
    !jsobject 0x00000000c2955a11 JS_OBJECT_TYPE 15 NativeModule 0
    !jsobject 0x00000000c2944519 JS_OBJECT_TYPE 11 对象 0
    !jsobject 0x00003abc617bee71 JS_OBJECT_TYPE 102 CallSite 3 接收器,有趣,位置

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

    !jsobject 0x00003abc617bee71 {

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

    名称值更多信息


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

    }

【讨论】:

  • 谢谢你,这是信息量,所以这个工具对节点 0.12.x 版本以及 0.10.x 版本都有效>
  • 是的,两个 node.js 版本都受支持,但目前您需要使用 IBM SDK for Node.js 才能工作,不支持 Mac/OS。
  • so mac 不支持,支持哪些平台?
  • 基本上其他一切,x86 平台 -x Linux,windows,Linux on system Z,Linux on power。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 2021-05-22
    • 2011-04-22
    相关资源
    最近更新 更多