2013-05-16 1 views
25

약 3.8GB RAM이있는 시스템에서 node.js에서 XMPP 서버를 실행합니다. 노드를 호출 할 때 전달하는 명령 행 매개 변수는 다음과 같습니다. /opt/node/bin/node --trace-gc --trace-gc --trace-gc -verbose main.jsnode.js 프로세스에서 v8의 메모리 관리를 스마트하게 구성

그러나 우리는 종종 프로세스에서 10 초 이상의 GC 일시 중지를보아야합니다. (때로는 Google 서버가 GC를 실행하고 있지만 GC를 일시 중지하는 것보다 많은 경우). 이런 일이 발생하면 프로세스는 정상적인 메모리 소비가됩니다. 약 1GB 힙 사용입니다. 프로세스에는 약 2GB 또는 여유 공간이 있지만이 프로세스는 메모리를 사용하지 않고 메모리를 확보하는 데 약간의 시간을 소비합니다.

--trace-gc-verbose 옵션에 의해 주어진 gc 추적을 보면, 약 2GB의 여유 공간이 "큰 개체 공간"으로 표시되고 많은 대형 개체가 없으므로 사용되지 않습니다 . 그리고 "Old pointers"와 "Old data space"에 더 많은 메모리가 필요하지만 "Large object space"의이 무료 메모리는 사용되지 않습니다.

  

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: 1, 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: 14, 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:     


내가 더 잘 V8의 메모리 관리를 구성 할 수있는 튜닝이 있습니까 : 긴 공정 GC 일시 정지가 어디에 여기

은 추적은 그 시대의 일 동안 GC에 의해 남아? 여기에 도움이 될만한 아이디어가 있습니까?

+0

하지만, 유휴 알림 컬렉션 *이 '유휴'고려 대해 적극적인 정말 *입니다 : 코드에서 찾을 이러한 패키지를 사용하여 더 적은 수의 콜렉션으로 전반적인 성능을 향상시킬 수 있습니다. 시작 매개 변수에 "--nouse-idle-notification"을 추가하십시오. – Joe

+0

업데이트 : --nouse-idle-notification 옵션을 사용해 보았습니다. 그러나 일시 중지에 도움이되지 않았습니다. 그리고 서버는 실시간 XMPP 통신을 위해 사용되며 많은 라이브 클라이언트/채팅을 지원하는 사용 사례가 있으므로 -expose-gc 플래그 및 gc를 사용하여 gc를 직접 호출하는 데 좋은 시간/유휴 시간이 없습니다() 호출. –

답변

20

V8의 한계라고 생각합니다. 64 비트 컴퓨터에서는 1.7GB 이상의 RAM을 사용하지 않습니다. FAQ로부터 견적 :

현재 기본 V8에 의해 64 비트 시스템 메모리 32 비트 시스템의 512MB 제한 및 1기가바이트있다. --max-old-space-size를 최대 1GB (32 비트) 및 ~ 1.7GB (64 비트)로 설정하여 제한을 높일 수 있지만 단일 프로세스 을 다음과 같이 분할하는 것이 좋습니다 당신이 기억 한계를 치는 경우에 몇몇 노동자.

이렇게하면 최대 메모리 제한에 도달하고 가비지 수집으로 인한 10 초의 일시 중지가 큰 걱정입니다. 제한 시간을 초과하거나 긴 지연에 직면하지 않도록 가비지 수집기를 주기적으로/유휴 상태로 실행하는 것을 고려해야합니다. 당신이 상황에 도움을 통과 할 수

매개 변수는 다음과 같습니다 (확인이 blog) 당신은 당신의 코드에서 GC를 실행 할 수 있도록 지속적으로 GC를 실행 방지

  • --nouse-idle-notification
  • --expose-gc
  • .

가장 중요한 것은 코드를 디버깅하여 메모리 누수를 제거하는 것입니다. 그래서, 그것은 직접적으로 관련이없는 것

+0

@danneu 나는 대답했을 때 그들이 대시라고 확신한다. 질문조차도 같은 표기법을 사용합니다. – user568109

+1

물론이 문제에 직면 한 이후 미래의 독자들에게 알리려고 노력합니다. :) – danneu

+12

노드 버전 0.10.33과 0.12.4를 사용하여 대시가 작동하는지 확인할 수 있습니다. 한가지 주목할 점은 매개 변수가 스크립트보다 먼저 전달되어야한다는 것입니다. 따라서'node script.js --max-old- 대신에 node-max-old-space-size = 8192 script.js'를 사용하십시오. space-size = 8192' –

관련 문제