--- id: P-REINFORCE-AUTO-D6D630 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Nodejs Production Monitoring" --- # [[Nodejs Production Monitoring|Nodejs Production Monitoring]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Node.js ν”„λ‘œλ•μ…˜ λͺ¨λ‹ˆν„°λ§μ€ 단일 ν”„λ‘œμ„ΈμŠ€λ‘œ μž₯κΈ° μ‹€ν–‰λ˜λŠ” Node.js μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν™˜κ²½μ—μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ‚˜ μ„±λŠ₯ μ €ν•˜λ₯Ό κ°μ§€ν•˜κ³  ν•΄κ²°ν•˜κΈ° μœ„ν•œ ν•„μˆ˜μ μΈ κ³Όμ •μž…λ‹ˆλ‹€ [1, 2]. 정상적인 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC) 이후 λ©”λͺ¨λ¦¬κ°€ κΈ°μ€€μΉ˜λ‘œ λŒμ•„μ˜€λŠ”μ§€(ν†±λ‹ˆλ°”ν€΄ νŒ¨ν„΄) ν˜Ήμ€ 계속 μ¦κ°€ν•˜λŠ”μ§€(래칫 νŒ¨ν„΄)λ₯Ό κ΄€μ°°ν•˜μ—¬ 이상 μ§•ν›„λ₯Ό νŒŒμ•…ν•©λ‹ˆλ‹€ [2]. 이λ₯Ό μœ„ν•΄ `process.memoryUsage()`, νž™ μŠ€λƒ…μƒ·(Heap Snapshot), GC 이벀트 좔적, 그리고 Prometheus와 같은 μ™ΈλΆ€ μ•Œλ¦Ό 도ꡬλ₯Ό μ’…ν•©μ μœΌλ‘œ ν™œμš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ OOM(Out of Memory) μΆ©λŒμ„ λ°©μ§€ν•˜κ³  μ•ˆμ •μ„±μ„ μœ μ§€ν•©λ‹ˆλ‹€ [3-5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **κΈ°λ³Έ μ§€ν‘œ 및 νŒ¨ν„΄ λͺ¨λ‹ˆν„°λ§:** 정상적인 Node.js ν”„λ‘œμ„ΈμŠ€λŠ” μš”μ²­μ΄ λͺ°λ¦΄ λ•Œ νž™ λ©”λͺ¨λ¦¬κ°€ μ¦κ°€ν–ˆλ‹€κ°€ GC 이후 κΈ°μ€€μΉ˜λ‘œ λ–¨μ–΄μ§€λŠ” 'ν†±λ‹ˆλ°”ν€΄(Sawtooth)' νŒ¨ν„΄μ„ λ³΄μž…λ‹ˆλ‹€ [2]. 반면 λˆ„μˆ˜κ°€ μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λŠ” λ©”λͺ¨λ¦¬κ°€ κ³„μ†ν•΄μ„œ λˆ„μ λ˜λŠ” '래칫(Ratchet)' νŒ¨ν„΄μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€ [2]. ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œλŠ” Prometheus의 `prom-client`λ₯Ό ν™œμš©ν•΄ λ©”λͺ¨λ¦¬ μ§€ν‘œλ₯Ό 내보내고, Grafana μ•Œλ¦Ό κ·œμΉ™μ„ μ„€μ •ν•˜μ—¬ OOM 좩돌 전에 λˆ„μˆ˜λ₯Ό 포착할 수 μžˆμŠ΅λ‹ˆλ‹€ [4]. λ˜ν•œ μ½”λ“œ λ‚΄μ—μ„œ `process.memoryUsage()`λ₯Ό ν˜ΈμΆœν•˜μ—¬ RSS(Resident Set Size), heapTotal, heapUsed, external, arrayBuffers λ“±μ˜ μƒνƒœλ₯Ό μ§€μ†μ μœΌλ‘œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€ [5]. * **νž™ ν”„λ‘œνŒŒμΌλ§ 및 μŠ€λƒ…μƒ· 도ꡬ:** * V8 λ‚΄μž₯ ν”„λ‘œνŒŒμΌλ§μ„ μœ„ν•΄ μ™ΈλΆ€ νŒ¨ν‚€μ§€ 없이 `--heap-prof` ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜, `chrome://inspect`λ₯Ό 톡해 Chrome DevTools에 μ—°κ²°ν•˜μ—¬ λ©”λͺ¨λ¦¬ ν• λ‹Ή νƒ€μž„λΌμΈμ„ 기둝할 수 μžˆμŠ΅λ‹ˆλ‹€ [2, 4]. * Chrome 개발자 도ꡬ 접근이 λΆˆκ°€λŠ₯ν•œ ν”„λ‘œλ•μ…˜ ν™˜κ²½μ˜ 경우, `heapdump` νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μœΌλ‘œ μŠ€λƒ…μƒ·μ„ μΊ‘μ²˜ν•œ λ’€ 파일둜 μ €μž₯ν•˜μ—¬ λ‘œμ»¬μ—μ„œ 뢄석할 수 μžˆμŠ΅λ‹ˆλ‹€ [3, 6]. * `clinic.js` 도ꡬλ₯Ό μ‚¬μš©ν•˜λ©΄ μ–΄λ–€ ν•¨μˆ˜κ°€ κ°€μž₯ λ§Žμ€ λ©”λͺ¨λ¦¬λ₯Ό μœ μ§€ν•˜κ³  μžˆλŠ”μ§€ μ‹œκ°ν™”ν•˜μ—¬ λˆ„μˆ˜ 원인을 λΉ λ₯΄κ²Œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6]. * **κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC) 좔적:** * μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ μ‹œ `--trace-gc` ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜λ©΄ Scavenge 및 Mark-sweepκ³Ό 같은 GC 이벀트의 μ„ΈλΆ€ 정보λ₯Ό μ½˜μ†”μ— 좜λ ₯ν•˜μ—¬ λ©”λͺ¨λ¦¬ μ†Œλͺ¨λŸ‰μ„ 뢄석할 수 μžˆμŠ΅λ‹ˆλ‹€ [7-9]. * 전체 수λͺ… μ£ΌκΈ° λ™μ•ˆμ˜ 좔적이 λΆ€λ‹΄μŠ€λŸ½λ‹€λ©΄, `v8` λͺ¨λ“ˆμ„ μ‚¬μš©ν•΄ λŸ°νƒ€μž„μ— ν”Œλž˜κ·Έλ₯Ό λ™μ μœΌλ‘œ μ„€μ •ν•˜κ±°λ‚˜, Node.js의 `perf_hooks` (PerformanceObserver)λ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μœΌλ‘œ GC 톡계λ₯Ό μˆ˜μ§‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [10, 11]. * **일반적인 κ²½κ³  및 λˆ„μˆ˜ μ§€ν‘œ:** λͺ¨λ‹ˆν„°λ§ 쀑 RSSλŠ” μ¦κ°€ν•˜μ§€λ§Œ νž™ λ©”λͺ¨λ¦¬κ°€ μ•ˆμ •μ μ΄λΌλ©΄ Native Buffer λ˜λŠ” C++ λ°”μΈλ”©μ˜ λˆ„μˆ˜λ₯Ό μ˜μ‹¬ν•΄μ•Ό ν•˜λ©°, μ΄λŠ” `process.memoryUsage().external`을 톡해 확인할 수 μžˆμŠ΅λ‹ˆλ‹€ [12]. λ˜ν•œ, 단일 이벀트 λ°©μΆœκΈ°μ— λ¦¬μŠ€λ„ˆκ°€ λˆ„μ λ  λ•Œ λ°œμƒν•˜λŠ” `MaxListenersExceededWarning` κ²½κ³ λŠ” ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ 이벀트 λ¦¬μŠ€λ„ˆ λˆ„μˆ˜μ˜ ν™•μ‹€ν•œ μ‹ ν˜Έλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€ [6, 12]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[V8 α„€α…‘α„‡α…΅α„Œα…΅ ᄏα…₯ᆯ렉션(Garbage Collection)|V8 Garbage Collection]], [[Heap Snapshot|Heap Snapshot]], [[Memory Leak|Memory Leak]], Performance Hooks, Prometheus - **Projects/Contexts:** Node.js Production Server - **Contradictions/Notes:** Node.jsλŠ” 단일 ν”„λ‘œμ„ΈμŠ€λ‘œ 수λͺ…이 κΈΈκΈ° λ•Œλ¬Έμ— μš”μ²­ μ»¨ν…μŠ€νŠΈκ°€ ν”„λ‘œμ„ΈμŠ€μ™€ ν•¨κ»˜ μ†Œλ©Έν•˜λŠ” 전톡적인 닀쀑 ν”„λ‘œμ„ΈμŠ€ μ„œλ²„μ™€ λ‹€λ₯΄κ²Œ λ©”λͺ¨λ¦¬ μ°Έμ‘°κ°€ μ§€μ†μ μœΌλ‘œ λˆ„μ λœλ‹€λŠ” ꡬ쑰적 차이점이 μžˆμŠ΅λ‹ˆλ‹€ [1]. ν•œνŽΈ, λͺ¨λ‹ˆν„°λ§μ΄λ‚˜ νŠΉμ • μ—£μ§€ μΌ€μ΄μŠ€μ—μ„œ `--expose-gc`λ₯Ό 톡해 μˆ˜λ™μœΌλ‘œ GC(`global.gc()`)λ₯Ό νŠΈλ¦¬κ±°ν•  수 μžˆμ§€λ§Œ, μ΄λŠ” 정상적인 μžλ™ GC μ•Œκ³ λ¦¬μ¦˜μ„ λΉ„ν™œμ„±ν™”ν•˜λŠ” 것은 μ•„λ‹ˆλ©° λ‚¨μš©ν•  경우 μ‹¬κ°ν•œ μ„±λŠ₯ μ €ν•˜λ₯Ό μœ λ°œν•  수 μžˆμœΌλ―€λ‘œ μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€ [13, 14]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Node.js Production Monitoring.md ---