v8内存限制

64位1.4G

内存空间分配

新老生代内存空间 -需启动时指定

  • 新生代空间 64位 32M
    • 两块reversed semispace
  • 老生代空间 64位 1.4G
  • 总的保留内存空间 4*reversed-semispace-size+max_old_generation_size

回收算法

新生代Scanvenge

分为from和to两个空间,每次出发Gc时,将from移往to然后将from空间清空.

新生代晋升老生代

  1. from中已经经历过Scanvenge将直接进入老生代
  2. 当to空间已经使用了25%(原因:为了后续的内存分配)

老生代Mark-sweep,Mark-compact

  • 降低回收时间
    • Incremental marking
    • lazy sweeping
    • incremental compaction

查看垃圾回收日志

node参数

  • trace_gc
  • prof
    • v8提供linux-tick-processor工具统计结果

高效使用内存

  • delete影响v8优化
  • 闭包全局对象引用会导致对象进入老生代

查看内存使用情况

内存概念:

  • rss : resident set size

process:

  • memoryUsage

os:

  • totalmem
  • freemem

内存泄露排查

  • node-headdump
  • node-memwatch