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

最佳答案

是的,IDDE是一个功能强大的工具,不仅可以检测内存泄漏,还可以确定Node.js的各种错误行为,包括崩溃和挂起。

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


我将从nodeoverview命令开始。请注意,由于某些原因,每个命令都以bang(!)开头,并且每个命令都以控件(ctrl + enter)输入。


!nodeoverview {

堆和垃圾收集

已使用的内存分配器:981 MB,可用:482 MB
GC值:144

这显示了堆的占用情况。


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

!jsmeminfo {

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

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



0x00000000de06d319 FIXED_ARRAY_TYPE 131112!数组0x00000000de06d319
0x00000000de0ac6d9 FIXED_ARRAY_TYPE 98360!数组0x00000000de0ac6d9
0x00000000e90e2f09 ASCII_STRING_TYPE 48152!string 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

}
根据此信息查看应用程序,看它们是否有理由占用内存。
如果要进一步“分解”对象以查看内容,请使用对象扩展命令,例如!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)
...
}
如果要基于对象的内部类型将整个堆“隔离”为多个部分,请使用jsgroupobjects。当您以不同的时间间隔进行多个转储,并且想要比较哪些对象随时间增长时,此功能将更加有用。

!jsgroupobjects {

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



!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接收器,fun,pos
如果要检查单个对象,请在对象地址上执行jsobject。

!jsobject 0x00003abc617bee71 {

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

名称值更多信息



接收器0x0000251abe506c91
乐趣0x00003abc617bb241
pos 0x00001dfd00000000 SMI = 0x1dfd

}

10-07 22:07