쓰레기 수집가 스트레스
don't stress the garbage collector
???
하지만, 무슨 뜻인가요?
Node.js Garbage Collector의 이론은 웹에서 광범위하게 설명되었습니다. this article이 제일 좋은 것 같아요.
그러나 여기에 실용적인 설명이 있습니다!
다음 간단한 코드로 새
stress.js
파일을 만듭니다.function doSomeThing () {
const s = `${'a'.repeat(10e6)}-${'v'.repeat(10e6)}`
return s
}
setInterval(doSomeThing, 10)
node --trace-gc stress.js
로 실행다음과 같은 끝없는 출력이 표시됩니다.
[8904:0000018D2126F130] 39 ms: Scavenge 2.1 (3.3) -> 1.7 (4.3) MB, 1.5 / 0.0 ms (average mu = 1.000, current mu = 1.000) allocation failure
[8904:0000018D2126F130] 1302 ms: Scavenge 2.4 (4.8) -> 2.0 (4.8) MB, 6.2 / 0.0 ms (average mu = 1.000, current mu = 1.000) allocation failure
[8904:0000018D2126F130] 5992 ms: Scavenge 2.9 (4.8) -> 2.0 (5.3) MB, 2.2 / 0.0 ms (average mu = 1.000, current mu = 1.000) allocation failure
[8904:0000018D2126F130] 10989 ms: Scavenge 3.0 (5.3) -> 2.0 (5.3) MB, 0.2 / 0.0 ms (average mu = 1.000, current mu = 1.000) allocation failure
[8904:0000018D2126F130] 14104 ms: Mark-sweep 2.6 (5.3) -> 1.6 (4.3) MB, 4.2 / 0.0 ms (+ 0.1 ms in 2 steps since start of marking, biggest step 0.1 ms, walltime since start of marking 10 ms) (average mu = 1.000, current mu = 1.000) finalize incremental marking via task GC in old space requested
[8904:0000018D2126F130] 14730 ms: Mark-sweep 1.7 (4.3) -> 1.6 (4.3) MB, 0.5 / 0.0 ms (+ 0.5 ms in 4 steps since start of marking, biggest step 0.3 ms, walltime since start of marking 23 ms) (average mu = 0.998, current mu = 0.998) finalize incremental marking via task GC in old space requested
[8904:0000018D2126F130] 20152 ms: Scavenge 2.6 (4.3) -> 1.6 (4.3) MB, 0.2 / 0.0 ms (average mu = 0.998, current mu = 0.998) allocation failure
...
Garbage Collect Scavenge 프로세스는 ~5초마다 여러 번 실행됩니다! 영원히!!
후드 아래에서 무슨 일이 일어나고 있습니까?
s
이 할당되어 New Spaces
문자열이 해제됨s
이 할당되고 새 공간s
문자열이 해제됨s
이 할당되고 새 공간s
문자열이 해제됨s
을 정리합니다이제 상위 범위에서
s
변수를 이동하는 스크립트를 수정하고 변경된 파일node --trace-gc no-stress.js
을 실행합니다.const s = `${'a'.repeat(10e6)}-${'v'.repeat(10e6)}`
function doSomeThing () {
return s
}
setInterval(doSomeThing, 10)
출력이 완전히 다릅니다.
15분 만에!!
[16388:000002874922BD50] 33 ms: Scavenge 2.1 (3.3) -> 1.7 (4.3) MB, 1.2 / 0.0 ms (average mu = 1.000, current mu = 1.000) allocation failure
[16388:000002874922BD50] 9338 ms: Scavenge 2.4 (4.8) -> 2.0 (4.8) MB, 4.7 / 0.0 ms (average mu = 1.000, current mu = 1.000) allocation failure
[16388:000002874922BD50] 18877 ms: Mark-sweep 2.2 (4.8) -> 1.6 (4.8) MB, 3.6 / 0.0 ms (+ 0.8 ms in 3 steps since start of marking, biggest step 0.7 ms, walltime since start of marking 17 ms) (average mu = 1.000, current mu = 1.000) finalize incremental marking via task GC in old space requested
[16388:000002874922BD50] 19484 ms: Mark-sweep 1.6 (4.8) -> 1.6 (5.3) MB, 1.7 / 0.0 ms (+ 1.1 ms in 2 steps since start of marking, biggest step 1.1 ms, walltime since start of marking 3 ms) (average mu = 0.995, current mu = 0.995) finalize incremental marking via task GC in old space requested
후드 아래에서 무슨 일이 일어나고 있습니까?
s
이 할당되어 힙 공간s
스트링은 Scavange의 2대까지 살아남아 Old Space로 간다즉, RegExp!
따라서 Garbage Collector를 스트레스 받지 마십시오!
Reference
이 문제에 관하여(쓰레기 수집가 스트레스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eomm/garbage-collector-stress-242f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)