Rumah  >  Soal Jawab  >  teks badan

javascript - masalah limpahan memori nod

<--- Last few GCs --->

117435494 ms: Mark-sweep 1244.2 (1352.1) -> 1226.4 (1306.1) MB, 2539.5 / 0.0 ms [allocation failure] [GC in old space requested].
117437812 ms: Mark-sweep 1226.4 (1306.1) -> 1225.0 (1288.1) MB, 2318.0 / 0.0 ms [last resort gc].
117440139 ms: Mark-sweep 1225.0 (1288.1) -> 1224.7 (1288.1) MB, 2326.8 / 0.0 ms [last resort gc].


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0xa0c120cfb39 <JS Object>
    1: set [/home/iclassroom/nodejs/cnwkw/node_modules/express-session/session/memory.js:~131] 
    [pc=0x3cd12a011ce7] (this=0x23d9dec61609 
    <a MemoryStore with map 0x9ff52e70789>,
    sessionId=0x2ae89ca06ba9 <String[32]: tjNgaUldqGDhIny-NrTy-k2Z14N07L1f>,
session=0x2ae89ca06be1 <a Session with map 0x9ff52ed4809>,callback=0x2ae89ca08c79 
    <JS Function onsave (SharedFunctionInfo 0x173be2d1b1)>)
    2: save [...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
 1: node::Abort() [/root/.nvm/versions/node/v6.10.2/bin/node]
 2: 0x109b7ac [/root/.nvm/versions/node/v6.10.2/bin/node]
我想大声告诉你我想大声告诉你2713 hari yang lalu787

membalas semua(2)saya akan balas

  • 阿神

    阿神2017-05-16 13:31:53

    Apabila melaksanakan fail, gunakan

    nod --inspect --expose-gc XXX.jsnode --inspect --expose-gc XXX.js

    这里面两个两个 flag --inspact 是告诉它通过chrome devtool 进行调试,--expose-gc 是说你可以通过global.gc()方法主动收集内存。

    执行之后就会有一个chrome://协议的链接,粘贴进chrome,就会出现最常见的chrome dev tool,在profile 里面,点击第二栏 Take Heap Snapshot,然后点击Take Snapshot,记录一次当前heap内存使用情况,此时就会出现当前的内存使用情况的快照,然后等一下,让node程序运行一段时间,再记录一次,然后点击左上角的Summary切换成Comparison模式,通过与第一次的对比,找到究竟是什么增加了,就能找到具体的问题。

    其次,可以在可疑的代码段前后通过 node 全局变量 processmemoryUsage 方法,打印出 heap
    究竟的使用量,通过对比代码前后使用量的差别,判断是否有 heap 的泄漏。

    通过题主的报错信息,像是 express session 记录时的问题,在写 session 的地方多打断点,通过 process.memoryUsage()

    Dua bendera --inspact memberitahunya untuk nyahpepijat melalui chrome devtool dan --expose-gc bermakna anda boleh mengumpul memori secara aktif melalui kaedah global.gc(). 🎜 🎜Selepas pelaksanaan, akan ada pautan ke protokol chrome:// Tampalkannya ke dalam chrome, dan alat chrome dev yang paling biasa akan muncul dalam profil, klik pada lajur kedua Take Heap Syot Kilat, dan kemudian klik Ambil Syot Kilat, rakam penggunaan memori timbunan Pada masa ini, syot kilat penggunaan memori semasa akan muncul, kemudian tunggu, biarkan program nod berjalan sebentar, rakam semula , dan kemudian klik pada penjuru kiri sebelah atas Tukar mod Ringkasan kepada Perbandingan Dengan membandingkan dengan kali pertama, anda boleh mengetahui perkara yang telah ditambahkan dan anda boleh mencari yang khusus masalah. 🎜 🎜Kedua, anda boleh mencetak timbunan melalui kaedah memoryUsage nod pembolehubah global proses sebelum dan selepas segmen kod yang mencurigakan
    Penggunaan sebenar ditentukan dengan membandingkan perbezaan penggunaan sebelum dan selepas kod untuk menentukan sama ada terdapat kebocoran heap. 🎜 🎜Menurut mesej ralat subjek, seperti masalah semasa merakam sesi ekspres, tambahkan lebih banyak titik putus di mana sesi ditulis dan gunakan kaedah process.memoryUsage() untuk melihat di mana masalahnya. Ini memerlukan kesabaran dan keberuntungan. 🎜

    balas
    0
  • 为情所困

    为情所困2017-05-16 13:31:53

    express-session secara langsung menggunakan memori itu sendiri untuk mengalami masalah kebocoran Dokumen telah menyatakan bahawa ia boleh digunakan dengan mongo atau redis

    balas
    0
  • Batalbalas