配置v8的内存管理对于node.js进程来说很明智 [英] Configuring v8's memory management to be smart for a node.js process

查看:113
本文介绍了配置v8的内存管理对于node.js进程来说很明智的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们在node.js上运行一台XMPP服务器,这台服务器的内存大约为3.8 GB。以下是我们在调用节点时传递的命令行参数:
/ opt / node / bin / node --max-old-space-size = 3000 --trace-gc --trace -gc -verbose main.js 然而,我们经常需要在这个过程中看到超过10秒的gc暂停(有时甚至超过1分钟gc暂停,我们的服务器什么都不做,但是,运行GC)。发生这种情况时,我们的过程就是正常的内存消耗:大约1 GB的堆使用量。这个过程大约有2GB或者可用空间,但是这个过程没有使用它,花了一分钟的时间来释放内存。

查看由-trace-gc-verbose选项给出的gc轨迹,它看起来像大约2 GB的可用空间被标记为大对象空间,并且没有用过,因为没有那么多大对象。虽然这个过程急需为旧指针和旧数据空间增加内存,但是不会使用大对象空间中的空闲内存。



以下是在gc暂停过程中发生gc留下的痕迹:

 

91635809 ms:标记扫描968.8(1039.0) - > 958.5(1038.0)MB,1/410 ms(自标记开始后的79个步骤中+ 2287 ms,最大步骤140.227051 ms)[空闲通知:确定增量] [请求的旧空间中的GC]。
使用的内存分配器:1088446464,可用:2124390400
使用的新空间:192,可用:8388416
使用的旧指针:633992112,可用:10460240,浪费:0
旧数据空间使用:315819248,可用:149776,浪费:0
使用的代码空间:5867936,可用:1271392,浪费:0
使用的地图空间:10257976,可用:6384072,浪费: 0
使用的单元格空间:175936,available:954304,waste:0
使用的大对象空间:51413600,available:2123325184
91636499 ms:Scavenge 965.5(1038.0) - > 964.6( 1038.0)MB,17 ms(自上次GC开始,在10个步骤中为+ 109 ms)[Runtime :: PerformGC]。
使用的内存分配器:1088446464,available:2124390400
使用的新空间:41256,available:2055896
使用的旧指针:628458688,available:15993664,waste:0
旧数据空间使用:315821792,可用:147232,浪费:0
使用的代码空间:5904256,可用:1235072,浪费:0
使用的地图空间:10263072,可用:6378976,浪费: 0
使用的单元格空间:175936,available:954304,waste:0
使用的大对象空间:51413600,available:2123325184
91637979 ms:Scavenge 966.6(1038.0) - > 964.7( 1038.0)MB,1 ms(自上次GC起43步内+ 1404 ms)[Runtime :: PerformGC]。
使用的内存分配器:1088446464,可用:2124390400
使用的新空间:76736,可用:2020416
旧指针,使用:628458688,可用:15993664,浪费:0
旧数据空间使用:315845520,可用:123504,浪费:0
使用的代码空间:5980576,可用:1158752,浪费:0
使用的地图空间:10271416,可用:6370632,浪费: 0
使用的单元格空间:175936,available:954304,waste:0
使用的大对象空间:51413600,available:2123325184
91639088 ms:标记扫描965.2(1038.0) - > 935.8(1038.0)MB,1/369 ms(从开始标记开始,以71个步骤+ 2235 ms,最大步骤69.053955 ms)[空闲通知:完成增量] [请求的旧空间中的GC]。
使用的内存分配器:1088446464,available:2124390400
使用的新空间:168,available:2096984
使用的旧指针:641099768,available:3352584,waste:0
旧数据空间使用:315820152,可用:148872,浪费:0
使用的代码空间:5862976,可用:1276352,浪费:0
使用的地图空间:10256744,可用:6385304,浪费: 0
使用的单元格空间:175936,available:954304,waste:0
使用的大对象空间:51413600,available:2123325184
91640987 ms:Scavenge 966.4(1038.0) - > 964.5( 1038.0)MB,1 ms(自上次GC后36个步长+ 1275 ms)[分配失败]。
使用的内存分配器:1088446464,可用:2124390400
使用的新空间:100944,可用:1996208
使用的旧指针:627957504,可用:16494848,浪费:0
旧数据空间使用:315830536,可用:138488,浪费:0
使用的代码空间:5951200,可用:1188128,浪费:0
使用的地图空间:10266376,可用:6375672,浪费: 0
使用的单元格空间:175936,available:954304,waste:0
使用的大对象空间:51413600,available:2123325184
91641560 ms:Scavenge 966.5(1038.0) - > 964.8( 1038.0)MB,2 ms(自上次GC以来,在29个步骤中为+ 481 ms)[Runtime :: PerformGC]。
使用的内存分配器:1088446464,可用:2124390400
使用的新空间:180712,可用:1916440
使用的旧指针:627957504,可用:16494848,浪费:0
旧数据空间使用:315871432,可用:97592,浪费:0
使用的代码空间:6019392,可用的:1119936,浪费:0
使用的地图空间:10269848,可用的:6372200,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2123325184
91642589 ms:标记扫描965.9(1038.0) - > 947.7(1038.0)MB,1/371 ms(从开始标记开始的89个步骤中+ 2369 ms,最大步骤67.302002 ms)[空闲通知:完成增量] [请求的旧空间中的GC]。
使用的内存分配器:1088446464,可用:2124390400
使用的新空间:264,可用:2096888
使用的旧指针:639592840,可用:4859512,浪费:0
旧数据空间使用:315849408,可用:119616,浪费:0
使用的代码空间:5862976,可用:1276352,浪费:0
使用的地图空间:10257136,可用:6384912,浪费: 0
使用的单元格空间:175936,available:954304,waste:0
使用的大对象空间:51413600,available:2123325184
91643688 ms:Scavenge 966.4(1038.0) - > 964.6( 1038.0)MB,5 ms(自上次GC起21个步骤中的+ 356 ms)[Runtime :: PerformGC]。
使用的内存分配器:1088446464,可用:2124390400
使用的新空间:144088,可用:1953064
使用的旧指针:627748368,可用:16703984,浪费:0
旧数据空间使用:315864504,可用:104520,浪费:0
使用的代码空间:5990240,可用:1149088,浪费:0
使用的地图空间:10264248,可用:6377800,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2123325184
91645276 ms:Scavenge 966.5(1038.0) - > 964.8( 1039.0)MB,2 ms(自上次GC起46步后+ 1520 ms)[分配失败]。
使用的内存分配器:1089495040,可用:2123341824
使用的新空间:108192,可用:1988960
使用的旧指针:627748368,可用:16703984,浪费:0
旧数据空间使用:315978760,可用:1022200,浪费:0
使用的代码空间:6039008,可用:1100320,浪费:0
使用的地图空间:10274216,可用:6367832,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2122276608
91645577 ms:Scavenge 966.6(1039.0) - > 965.8( 1039.0)MB,3 ms(自上次GC后23个步骤中+ 263 ms)[分配失败]。
使用的内存分配器:1089495040,可用:2123341824
使用的新空间:516168,可用:1580984
使用的旧指针:627843088,可用:16609264,浪费:0
旧数据空间使用:316550680,可用:450280,浪费:0
使用的代码空间:6039008,可用:1100320,浪费:0
使用的地图空间:10275280,可用:6366768,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2122276608
91645645 ms:Scavenge 967.3(1039.0) - > 966.8( 1039.0)MB,5毫秒(自上次GC起16个步骤中的+8毫秒)[分配失败]。
使用的内存分配器:1089495040,可用:2123341824
使用的新空间:1012304,可用:3182000
使用的旧指针:627968088,可用:16484264,浪费:0
旧数据空间使用:316947304,可用:53656,浪费:0
使用的代码空间:6039008,可用:1100320,浪费:0
使用的地图空间:10275280,可用:6366768,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2122276608
91645948 ms:Scavenge 969.8(1039.0) - > 968.6 1041.0)MB,9 ms(自上次GC开始,35步中为+ 188 ms)[分配失败]。
使用的内存分配器:1091592192,available:2121244672
使用的新空间:1032320,available:3161984
使用的旧指针:628219008,available:16233344,waste:0
旧数据空间使用:318537928,可用:526904,浪费:0
使用的代码空间:6039264,可用:1100064,浪费:0
使用的地图空间:10276232,可用:6365816,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2120179456
91646093 ms:Scavenge 971.6(1041.0) - > 970.5( 1042.0)MB,13 ms(自上次GC开始,在30个步骤中为+ 36 ms)[Runtime :: PerformGC]。
使用的内存分配器:1092640768,可用:2120196096
使用的新空间:2044456,可用:6344152
使用的旧指针:628437424,可用:16014928,浪费:0
旧数据空间使用:319366376,可用:730392,浪费:0
使用的代码空间:6039264,可用:1100064,浪费:0
使用的地图空间:10276232,可用:6365816,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2119130880
91646306 ms:Scavenge 976.5(1042.0) - > 974.7( 1044.0)MB,1 / 14ms(自上一次GC以来的67步中+ 114ms)[分配失败]。
使用的内存分配器:1094737920,可用:2118098944
使用的新空间:2064112,可用:6324496
使用的旧指针:630440024,可用:14012328,浪费:0
旧数据空间使用:321653384,可用:507256,浪费:0
使用的代码空间:6055936,可用:1083392,浪费:0
使用的地图空间:10278192,可用:6363856,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2117033728
91646386 ms:Scavenge 980.6(1044.0) - > 979.2( 1046.0)MB,12 ms(自上次GC开始,64步中为+ 10 ms)[分配失败]。
使用的内存分配器:1096835072,可用:2116001792
使用的新空间:4127736,可用:12649480
旧指针,使用:631182984,可用:13269368,浪费:0
旧数据空间使用:323586008,可用:638504,浪费:0
使用的代码空间:6055936,可用:1083392,浪费:0
使用的地图空间:10278192,可用:6363856,浪费: 0
使用的单元格空间:176192,可用的:954048,浪费:0
使用的大对象空间:51413600,可用:2114936576
由于促销率较高,有限的新空间大小:1 MB
91646810 ms:标记扫描979.2(1046.0) - > 973.2(1049.0)MB,1/422 ms(从开始标记开始303步中+ 2500毫秒,最大步长0.122070毫秒)[StackGuard GC请求] [GC在旧空间请求]。
使用的内存分配器:1099980800,可用:2112856064
使用的新空间:192,可用:1048384
旧指针,使用:636894816,可用:9621408,浪费:0
旧数据空间使用:325256448,可用:0,浪费:0
使用的代码空间:5860928,可用:1278400,浪费:0
使用的地图空间:10257976,可用:6384072,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2111790848
91646825 ms:Scavenge 974.2(1049.0) - > 979.0( 1049.0)MB,7 ms [分配失败]。
使用的内存分配器:1099980800,可用:2112856064
使用的新空间:257960,可用:790616
旧指针,使用:635948464,可用:10567760,浪费:0
旧数据空间使用:325256448,可用:0,浪费:0
使用的代码空间:5873440,可用:1265888,浪费:0
使用的地图空间:10258536,可用:6383512,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2111790848
91646834 ms:Scavenge 979.7(1049.0) - > 980.0( 1049.0)MB,2 ms [分配失败]。
使用的内存分配器:1099980800,可用:2112856064
使用的新空间:257968,可用:790608
使用的旧指针:635671408,可用:10844816,浪费:0
旧数据空间使用:325256448,可用:0,浪费:0
使用的代码空间:5873440,可用:1265888,浪费:0
使用的地图空间:10258536,可用:6383512,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2111790848
91646842 ms:Scavenge 980.7(1049.0) - > 980.6( 1049.0)MB,2 ms [分配失败]。
使用的内存分配器:1099980800,可用:2112856064
使用的新空间:257960,可用:790616
使用的旧指针:635493872,可用:11022352,浪费:0
旧数据空间使用:325256448,可用:0,浪费:0
使用的代码空间:5873440,可用:1265888,浪费:0
使用的地图空间:10258536,可用:6383512,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2111790848
91646849 ms:Scavenge 981.3(1049.0) - > 981.2( 1049.0)MB,1 ms [分配失败]。
使用的内存分配器:1099980800,可用:2112856064
使用的新空间:257968,可用:790608
旧指针,使用:635981640,可用:10534584,浪费:0
旧数据空间使用:325256448,可用:0,浪费:0
使用的代码空间:5873440,可用:1265888,浪费:0
使用的地图空间:10258536,可用:6383512,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2111790848
91646863 ms:Scavenge 981.9(1049.0) - > 981.6 1051.0)MB,1 ms [分配失败]。
使用的内存分配器:1102077952,可用:2110758912
使用的新空间:257960,可用:790616
旧指针,使用:637013288,可用:10534872,浪费:0
旧数据空间使用:326288384,可用:0,浪费:0
使用的代码空间:5873440,可用:1265888,浪费:0
使用的地图空间:10258536,可用:6383512,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2109693696
91651639 ms:标记扫描981.6(1051.0) - > 924.7(1051.0)MB,1 / 4775ms [最后的手段gc]。
使用的内存分配器:1102077952,可用:2110758912
使用的新空间:96,可用:1048480
使用的旧指针:626794192,可用:20753968,浪费:0
旧数据空间使用:275760200,可用:50528184,浪费:0
使用的代码空间:6182208,可用:957120,浪费:0
使用的地图空间:10257808,可用的:6384240,浪费: 0
使用的单元格空间:176192,available:954048,waste:0
使用的大对象空间:51413600,available:2109693696
91663655 ms:标记扫描924.7(1051.0) - > 924.7(1050.0)MB,1/12015 ms [最后手段gc]。
使用的内存分配器:1101029376,available:2111807488
使用的新空间:0,available:1048576
使用的旧指针:626169464,available:21378696,waste:0
旧数据空间使用:275759960,可用:49496488,浪费:0
使用的代码空间:5850624,可用:1288704,浪费:0
使用的地图空间:10257808,可用的:6384240,浪费:


是否有任何调整可以更好地配置v8的内存管理?任何想法可能对此有所帮助?

解决方案

我认为这是V8的限制。它在64位机器上不使用超过1.7 GB的RAM。从常见问题解答:b
$ b


目前,默认情况下,v8在32位
系统上的内存限制为512mb,64位为1gb位系统。可以通过将
- max-old-space-size设置为最大值〜1gb(32位)和〜1.7gb(64位)来提高限制,但建议您将单个如果你达到内存限制,处理
到几名工人。

所以在这之后,你正在达到最大内存限制,由于垃圾回收暂停10秒是一大担心。您应该考虑定期/闲置时运行垃圾回收器,以避免达到极限并面临长时间的延迟。

您可以通过的参数来帮助解决这个问题:(请检查< a href =http://blog.caustik.com/2012/04/11/escape-the-1-4gb-v8-heap-limit-in-node-js/ =noreferrer>博客 a>)


  • - nouse-idle-notification

  • - expose-gc 这将允许您从代码运行GC。



最重要的是调试您的代码以消除内存泄漏。使用这些包在代码中找到它们: =noreferrer> nodetime

  • node-inspector


  • We run an XMPP server on node.js, on a machine with around 3.8 GB RAM. Here are the command line parameters we pass while invoking node : /opt/node/bin/node --max-old-space-size=3000 --trace-gc --trace-gc-verbose main.js

    However, we frequently have to see more than 10 second gc pauses in the process ( sometimes as much as more than 1 minute gc pauses, where our server is doing nothing but running GC ). When this happens, our process is at it's normal memory consumption : around 1 GB heap usage. There is around 2 GB or free space available for the process, but the process just does not use it and spends a minute trying to free memory.

    Looking at the gc trace given by --trace-gc-verbose option, it looks like around 2 GB free space is marked as "Large object space", and is not used, as there are not that many large objects. And though the process is in dire need of more memory for "Old pointers" and "Old data space", this free memory from "Large object space" is not used.

    Here is the trace left by gc during one of those times where there was a long gc pause in the process :

        
    
    91635809 ms: Mark-sweep 968.8 (1039.0) -> 958.5 (1038.0) MB, 1 / 410 ms (+ 2287 ms in 79 steps since start of marking, biggest step 140.227051 ms) [idle notification: finalize incremental] [GC in old space requested].
    Memory allocator,   used: 1088446464, available: 2124390400
    New space,          used:      192, available:  8388416
    Old pointers,       used: 633992112, available: 10460240, waste:        0
    Old data space,     used: 315819248, available:   149776, waste:        0
    Code space,         used:  5867936, available:  1271392, waste:        0
    Map space,          used: 10257976, available:  6384072, waste:        0
    Cell space,         used:   175936, available:   954304, waste:        0
    Large object space, used: 51413600, available: 2123325184
    91636499 ms: Scavenge 965.5 (1038.0) -> 964.6 (1038.0) MB, 17 ms (+ 109 ms in 10 steps since last GC) [Runtime::PerformGC].
    Memory allocator,   used: 1088446464, available: 2124390400
    New space,          used:    41256, available:  2055896
    Old pointers,       used: 628458688, available: 15993664, waste:        0
    Old data space,     used: 315821792, available:   147232, waste:        0
    Code space,         used:  5904256, available:  1235072, waste:        0
    Map space,          used: 10263072, available:  6378976, waste:        0
    Cell space,         used:   175936, available:   954304, waste:        0
    Large object space, used: 51413600, available: 2123325184
    91637979 ms: Scavenge 966.6 (1038.0) -> 964.7 (1038.0) MB, 1 ms (+ 1404 ms in 43 steps since last GC) [Runtime::PerformGC].
    Memory allocator,   used: 1088446464, available: 2124390400
    New space,          used:    76736, available:  2020416
    Old pointers,       used: 628458688, available: 15993664, waste:        0
    Old data space,     used: 315845520, available:   123504, waste:        0
    Code space,         used:  5980576, available:  1158752, waste:        0
    Map space,          used: 10271416, available:  6370632, waste:        0
    Cell space,         used:   175936, available:   954304, waste:        0
    Large object space, used: 51413600, available: 2123325184
    91639088 ms: Mark-sweep 965.2 (1038.0) -> 935.8 (1038.0) MB, 1 / 369 ms (+ 2235 ms in 71 steps since start of marking, biggest step 69.053955 ms) [idle notification: finalize incremental] [GC in old space requested].
    Memory allocator,   used: 1088446464, available: 2124390400
    New space,          used:      168, available:  2096984
    Old pointers,       used: 641099768, available:  3352584, waste:        0
    Old data space,     used: 315820152, available:   148872, waste:        0
    Code space,         used:  5862976, available:  1276352, waste:        0
    Map space,          used: 10256744, available:  6385304, waste:        0
    Cell space,         used:   175936, available:   954304, waste:        0
    Large object space, used: 51413600, available: 2123325184
    91640987 ms: Scavenge 966.4 (1038.0) -> 964.5 (1038.0) MB, 1 ms (+ 1275 ms in 36 steps since last GC) [allocation failure].
    Memory allocator,   used: 1088446464, available: 2124390400
    New space,          used:   100944, available:  1996208
    Old pointers,       used: 627957504, available: 16494848, waste:        0
    Old data space,     used: 315830536, available:   138488, waste:        0
    Code space,         used:  5951200, available:  1188128, waste:        0
    Map space,          used: 10266376, available:  6375672, waste:        0
    Cell space,         used:   175936, available:   954304, waste:        0
    Large object space, used: 51413600, available: 2123325184
    91641560 ms: Scavenge 966.5 (1038.0) -> 964.8 (1038.0) MB, 2 ms (+ 481 ms in 29 steps since last GC) [Runtime::PerformGC].
    Memory allocator,   used: 1088446464, available: 2124390400
    New space,          used:   180712, available:  1916440
    Old pointers,       used: 627957504, available: 16494848, waste:        0
    Old data space,     used: 315871432, available:    97592, waste:        0
    Code space,         used:  6019392, available:  1119936, waste:        0
    Map space,          used: 10269848, available:  6372200, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2123325184
    91642589 ms: Mark-sweep 965.9 (1038.0) -> 947.7 (1038.0) MB, 1 / 371 ms (+ 2369 ms in 89 steps since start of marking, biggest step 67.302002 ms) [idle notification: finalize incremental] [GC in old space requested].
    Memory allocator,   used: 1088446464, available: 2124390400
    New space,          used:      264, available:  2096888
    Old pointers,       used: 639592840, available:  4859512, waste:        0
    Old data space,     used: 315849408, available:   119616, waste:        0
    Code space,         used:  5862976, available:  1276352, waste:        0
    Map space,          used: 10257136, available:  6384912, waste:        0
    Cell space,         used:   175936, available:   954304, waste:        0
    Large object space, used: 51413600, available: 2123325184
    91643688 ms: Scavenge 966.4 (1038.0) -> 964.6 (1038.0) MB, 5 ms (+ 356 ms in 21 steps since last GC) [Runtime::PerformGC].
    Memory allocator,   used: 1088446464, available: 2124390400
    New space,          used:   144088, available:  1953064
    Old pointers,       used: 627748368, available: 16703984, waste:        0
    Old data space,     used: 315864504, available:   104520, waste:        0
    Code space,         used:  5990240, available:  1149088, waste:        0
    Map space,          used: 10264248, available:  6377800, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2123325184
    91645276 ms: Scavenge 966.5 (1038.0) -> 964.8 (1039.0) MB, 2 ms (+ 1520 ms in 46 steps since last GC) [allocation failure].
    Memory allocator,   used: 1089495040, available: 2123341824
    New space,          used:   108192, available:  1988960
    Old pointers,       used: 627748368, available: 16703984, waste:        0
    Old data space,     used: 315978760, available:  1022200, waste:        0
    Code space,         used:  6039008, available:  1100320, waste:        0
    Map space,          used: 10274216, available:  6367832, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2122276608
    91645577 ms: Scavenge 966.6 (1039.0) -> 965.8 (1039.0) MB, 3 ms (+ 263 ms in 23 steps since last GC) [allocation failure].
    Memory allocator,   used: 1089495040, available: 2123341824
    New space,          used:   516168, available:  1580984
    Old pointers,       used: 627843088, available: 16609264, waste:        0
    Old data space,     used: 316550680, available:   450280, waste:        0
    Code space,         used:  6039008, available:  1100320, waste:        0
    Map space,          used: 10275280, available:  6366768, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2122276608
    91645645 ms: Scavenge 967.3 (1039.0) -> 966.8 (1039.0) MB, 5 ms (+ 8 ms in 16 steps since last GC) [allocation failure].
    Memory allocator,   used: 1089495040, available: 2123341824
    New space,          used:  1012304, available:  3182000               
    Old pointers,       used: 627968088, available: 16484264, waste:        0
    Old data space,     used: 316947304, available:    53656, waste:        0
    Code space,         used:  6039008, available:  1100320, waste:        0
    Map space,          used: 10275280, available:  6366768, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2122276608
    91645948 ms: Scavenge 969.8 (1039.0) -> 968.6 (1041.0) MB, 9 ms (+ 188 ms in 35 steps since last GC) [allocation failure].
    Memory allocator,   used: 1091592192, available: 2121244672
    New space,          used:  1032320, available:  3161984
    Old pointers,       used: 628219008, available: 16233344, waste:        0
    Old data space,     used: 318537928, available:   526904, waste:        0
    Code space,         used:  6039264, available:  1100064, waste:        0
    Map space,          used: 10276232, available:  6365816, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2120179456
    91646093 ms: Scavenge 971.6 (1041.0) -> 970.5 (1042.0) MB, 13 ms (+ 36 ms in 30 steps since last GC) [Runtime::PerformGC].
    Memory allocator,   used: 1092640768, available: 2120196096
    New space,          used:  2044456, available:  6344152
    Old pointers,       used: 628437424, available: 16014928, waste:        0
    Old data space,     used: 319366376, available:   730392, waste:        0
    Code space,         used:  6039264, available:  1100064, waste:        0
    Map space,          used: 10276232, available:  6365816, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2119130880
    91646306 ms: Scavenge 976.5 (1042.0) -> 974.7 (1044.0) MB, 1 / 14 ms (+ 114 ms in 67 steps since last GC) [allocation failure].
    Memory allocator,   used: 1094737920, available: 2118098944
    New space,          used:  2064112, available:  6324496
    Old pointers,       used: 630440024, available: 14012328, waste:        0
    Old data space,     used: 321653384, available:   507256, waste:        0
    Code space,         used:  6055936, available:  1083392, waste:        0
    Map space,          used: 10278192, available:  6363856, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2117033728
    91646386 ms: Scavenge 980.6 (1044.0) -> 979.2 (1046.0) MB, 12 ms (+ 10 ms in 64 steps since last GC) [allocation failure].
    Memory allocator,   used: 1096835072, available: 2116001792
    New space,          used:  4127736, available: 12649480
    Old pointers,       used: 631182984, available: 13269368, waste:        0
    Old data space,     used: 323586008, available:   638504, waste:        0
    Code space,         used:  6055936, available:  1083392, waste:        0
    Map space,          used: 10278192, available:  6363856, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2114936576
    Limited new space size due to high promotion rate: 1 MB
    91646810 ms: Mark-sweep 979.2 (1046.0) -> 973.2 (1049.0) MB, 1 / 422 ms (+ 2500 ms in 303 steps since start of marking, biggest step 0.122070 ms) [StackGuard GC request] [GC in old space requested].
    Memory allocator,   used: 1099980800, available: 2112856064
    New space,          used:      192, available:  1048384
    Old pointers,       used: 636894816, available:  9621408, waste:        0
    Old data space,     used: 325256448, available:        0, waste:        0
    Code space,         used:  5860928, available:  1278400, waste:        0
    Map space,          used: 10257976, available:  6384072, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2111790848
    91646825 ms: Scavenge 974.2 (1049.0) -> 979.0 (1049.0) MB, 7 ms [allocation failure].
    Memory allocator,   used: 1099980800, available: 2112856064
    New space,          used:   257960, available:   790616
    Old pointers,       used: 635948464, available: 10567760, waste:        0
    Old data space,     used: 325256448, available:        0, waste:        0
    Code space,         used:  5873440, available:  1265888, waste:        0
    Map space,          used: 10258536, available:  6383512, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2111790848
    91646834 ms: Scavenge 979.7 (1049.0) -> 980.0 (1049.0) MB, 2 ms [allocation failure].
    Memory allocator,   used: 1099980800, available: 2112856064
    New space,          used:   257968, available:   790608
    Old pointers,       used: 635671408, available: 10844816, waste:        0
    Old data space,     used: 325256448, available:        0, waste:        0
    Code space,         used:  5873440, available:  1265888, waste:        0
    Map space,          used: 10258536, available:  6383512, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2111790848
    91646842 ms: Scavenge 980.7 (1049.0) -> 980.6 (1049.0) MB, 2 ms [allocation failure].
    Memory allocator,   used: 1099980800, available: 2112856064
    New space,          used:   257960, available:   790616
    Old pointers,       used: 635493872, available: 11022352, waste:        0
    Old data space,     used: 325256448, available:        0, waste:        0
    Code space,         used:  5873440, available:  1265888, waste:        0
    Map space,          used: 10258536, available:  6383512, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2111790848
    91646849 ms: Scavenge 981.3 (1049.0) -> 981.2 (1049.0) MB, 1 ms [allocation failure].
    Memory allocator,   used: 1099980800, available: 2112856064
    New space,          used:   257968, available:   790608
    Old pointers,       used: 635981640, available: 10534584, waste:        0
    Old data space,     used: 325256448, available:        0, waste:        0
    Code space,         used:  5873440, available:  1265888, waste:        0
    Map space,          used: 10258536, available:  6383512, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2111790848
    91646863 ms: Scavenge 981.9 (1049.0) -> 981.6 (1051.0) MB, 1 ms [allocation failure].
    Memory allocator,   used: 1102077952, available: 2110758912
    New space,          used:   257960, available:   790616
    Old pointers,       used: 637013288, available: 10534872, waste:        0
    Old data space,     used: 326288384, available:        0, waste:        0
    Code space,         used:  5873440, available:  1265888, waste:        0
    Map space,          used: 10258536, available:  6383512, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2109693696
    91651639 ms: Mark-sweep 981.6 (1051.0) -> 924.7 (1051.0) MB, 1 / 4775 ms [last resort gc].
    Memory allocator,   used: 1102077952, available: 2110758912
    New space,          used:       96, available:  1048480
    Old pointers,       used: 626794192, available: 20753968, waste:        0
    Old data space,     used: 275760200, available: 50528184, waste:        0
    Code space,         used:  6182208, available:   957120, waste:        0
    Map space,          used: 10257808, available:  6384240, waste:        0
    Cell space,         used:   176192, available:   954048, waste:        0
    Large object space, used: 51413600, available: 2109693696
    91663655 ms: Mark-sweep 924.7 (1051.0) -> 924.7 (1050.0) MB, 1 / 12015 ms [last resort gc].
    Memory allocator,   used: 1101029376, available: 2111807488
    New space,          used:        0, available:  1048576
    Old pointers,       used: 626169464, available: 21378696, waste:        0
    Old data space,     used: 275759960, available: 49496488, waste:        0
    Code space,         used:  5850624, available:  1288704, waste:        0
    Map space,          used: 10257808, available:  6384240, waste:                 
    
    
    

    Is there any tuning that I can do to better configure v8's memory management ? Any ideas on what might help here ?

    解决方案

    I think it is a limitation of V8. It does not use more than 1.7 GB of RAM on 64 bit machines. Quote from FAQ:

    Currently, by default v8 has a memory limit of 512mb on 32-bit systems, and 1gb on 64-bit systems. The limit can be raised by setting --max-old-space-size to a maximum of ~1gb (32-bit) and ~1.7gb (64-bit), but it is recommended that you split your single process into several workers if you are hitting memory limits.

    So following this you are hitting the maximum memory limits and the 10 second pause due to garbage collection is a big worry. You should consider running garbage collector periodically/when idle to avoid hitting the limit and facing long delays.

    Parameters which you can pass to help the situation are : (Check this blog)

    • --nouse-idle-notification which prevents running GC constantly and
    • --expose-gc which will allow you to run GC from your code.

    Most importantly debug your code to remove memory leaks. Use these package to find them in your code:

    这篇关于配置v8的内存管理对于node.js进程来说很明智的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆