ฉันจะตรวจสอบการใช้หน่วยความจำของ Node.js ได้อย่างไร?
ฉันจะตรวจสอบการใช้หน่วยความจำของ Node.js ได้อย่างไร?
คำตอบ:
node-memwatch : ตรวจจับและค้นหาการรั่วไหลของหน่วยความจำในรหัส Node.JS ตรวจสอบบทช่วยสอนนี้การติดตามการรั่วไหลของหน่วยความจำใน Node.js
โมดูลกระบวนการในตัวมีวิธีการmemoryUsage
ที่ให้ข้อมูลเชิงลึกในการใช้หน่วยความจำของกระบวนการ Node.js ปัจจุบัน นี่คือตัวอย่างจากใน Node v0.12.2 บนระบบ 64 บิต:
$ node --expose-gc
> process.memoryUsage(); // Initial usage
{ rss: 19853312, heapTotal: 9751808, heapUsed: 4535648 }
> gc(); // Force a GC for the baseline.
undefined
> process.memoryUsage(); // Baseline memory usage.
{ rss: 22269952, heapTotal: 11803648, heapUsed: 4530208 }
> var a = new Array(1e7); // Allocate memory for 10m items in an array
undefined
> process.memoryUsage(); // Memory after allocating so many items
{ rss: 102535168, heapTotal: 91823104, heapUsed: 85246576 }
> a = null; // Allow the array to be garbage-collected
null
> gc(); // Force GC (requires node --expose-gc)
undefined
> process.memoryUsage(); // Memory usage after GC
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4528072 }
> process.memoryUsage(); // Memory usage after idling
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4753376 }
ในตัวอย่างง่ายๆนี้คุณจะเห็นว่าการจัดสรรอาร์เรย์ขององค์ประกอบ 10M ผู้บริโภคประมาณ 80MB (ลองดูที่heapUsed
)
ถ้าคุณดูที่รหัสที่มาของ V8 ( Array::New
, Heap::AllocateRawFixedArray
, FixedArray::SizeFor
) แล้วคุณจะเห็นว่าหน่วยความจำที่ใช้โดยอาร์เรย์เป็นค่าคงที่บวกความยาวคูณด้วยขนาดของตัวชี้ที่ หลังมีขนาด 8 ไบต์ในระบบ 64 บิตซึ่งยืนยันว่าความแตกต่างของหน่วยความจำที่สังเกตได้คือ 8 x 10 = 80MB นั้นสมเหตุสมผล
--expose-gc
สำหรับgc
ฟังก์ชั่น?
--expose-gc
(ต้องใช้) ถูกนำมาใช้ในคำตอบเพื่อกระตุ้นให้เกิดการรวบรวมขยะอย่างกำหนดเพื่อให้ง่ายต่อการดูรายงาน process.memoryUsage()
gc()
--expose-gc
process.memoryUsage
นอกจากนี้หากคุณต้องการทราบหน่วยความจำส่วนกลางมากกว่ากระบวนการโหนด ':
var os = require('os');
os.freemem();
os.totalmem();
memwatchดั้งเดิมนั้นตายเป็นหลัก ลองใช้memwatch-nextแทนซึ่งดูเหมือนว่าจะทำงานได้ดีกับ Node เวอร์ชันใหม่ ๆ
บน Linux / Unix (หมายเหตุ: Mac OS เป็น Unix) ให้ใช้top
และกด M ( Shift+ M) เพื่อจัดเรียงกระบวนการตามการใช้หน่วยความจำ
บน Windows ให้ใช้ตัวจัดการงาน
Applications > Utilities
แล้วคุณจะพบActivity Monitor
แอพ อันนั้นเทียบเท่ากับ Task Manager OS X ก็มีtop
คำสั่งเช่นกัน
htop
แทนด้านบนบน Linux มันดีขึ้นมาก.